Browse Source

first commit

hjp 2 months ago
commit
8fb0aba95b
100 changed files with 7551 additions and 0 deletions
  1. 39 0
      README.md
  2. 307 0
      db/shunfengche.sql
  3. 1142 0
      logs/shunfengche.log
  4. BIN
      logs/shunfengche.log.2025-05-12.0.gz
  5. BIN
      logs/shunfengche.log.2025-05-13.0.gz
  6. 536 0
      pom.xml
  7. 25 0
      src/main/java/com/sqx/SqxApplication.java
  8. 19 0
      src/main/java/com/sqx/common/annotation/SysLog.java
  9. 37 0
      src/main/java/com/sqx/common/aspect/RedisAspect.java
  10. 92 0
      src/main/java/com/sqx/common/aspect/SysLogAspect.java
  11. 11 0
      src/main/java/com/sqx/common/entity/WMPoint.java
  12. 52 0
      src/main/java/com/sqx/common/exception/SqxException.java
  13. 55 0
      src/main/java/com/sqx/common/exception/SqxExceptionHandler.java
  14. 12 0
      src/main/java/com/sqx/common/utils/ConfigConstant.java
  15. 110 0
      src/main/java/com/sqx/common/utils/Constant.java
  16. 157 0
      src/main/java/com/sqx/common/utils/DateUtils.java
  17. 24 0
      src/main/java/com/sqx/common/utils/HttpContextUtils.java
  18. 49 0
      src/main/java/com/sqx/common/utils/IPUtils.java
  19. 17 0
      src/main/java/com/sqx/common/utils/MapUtils.java
  20. 46 0
      src/main/java/com/sqx/common/utils/MyMetaObjectHandler.java
  21. 101 0
      src/main/java/com/sqx/common/utils/PageUtils.java
  22. 175 0
      src/main/java/com/sqx/common/utils/QRCodeUtil.java
  23. 68 0
      src/main/java/com/sqx/common/utils/Query.java
  24. 12 0
      src/main/java/com/sqx/common/utils/RedisKeys.java
  25. 90 0
      src/main/java/com/sqx/common/utils/RedisUtils.java
  26. 58 0
      src/main/java/com/sqx/common/utils/Result.java
  27. 52 0
      src/main/java/com/sqx/common/utils/ShiroUtils.java
  28. 42 0
      src/main/java/com/sqx/common/utils/SpringContextUtils.java
  29. 23 0
      src/main/java/com/sqx/common/validator/Assert.java
  30. 40 0
      src/main/java/com/sqx/common/validator/ValidatorUtils.java
  31. 8 0
      src/main/java/com/sqx/common/validator/group/AddGroup.java
  32. 8 0
      src/main/java/com/sqx/common/validator/group/AliyunGroup.java
  33. 12 0
      src/main/java/com/sqx/common/validator/group/Group.java
  34. 8 0
      src/main/java/com/sqx/common/validator/group/QcloudGroup.java
  35. 8 0
      src/main/java/com/sqx/common/validator/group/QiniuGroup.java
  36. 10 0
      src/main/java/com/sqx/common/validator/group/UpdateGroup.java
  37. 526 0
      src/main/java/com/sqx/common/xss/HTMLFilter.java
  38. 41 0
      src/main/java/com/sqx/common/xss/SQLFilter.java
  39. 51 0
      src/main/java/com/sqx/common/xss/XssFilter.java
  40. 138 0
      src/main/java/com/sqx/common/xss/XssHttpServletRequestWrapper.java
  41. 47 0
      src/main/java/com/sqx/config/CorsConfig.java
  42. 40 0
      src/main/java/com/sqx/config/FilterConfig.java
  43. 30 0
      src/main/java/com/sqx/config/KaptchaConfig.java
  44. 22 0
      src/main/java/com/sqx/config/MybatisPlusConfig.java
  45. 54 0
      src/main/java/com/sqx/config/RedisConfig.java
  46. 90 0
      src/main/java/com/sqx/config/ShiroConfig.java
  47. 53 0
      src/main/java/com/sqx/config/SwaggerConfig.java
  48. 26 0
      src/main/java/com/sqx/config/ThreadConfig.java
  49. 14 0
      src/main/java/com/sqx/datasource/annotation/DataSource.java
  50. 61 0
      src/main/java/com/sqx/datasource/aspect/DataSourceAspect.java
  51. 47 0
      src/main/java/com/sqx/datasource/config/DynamicContextHolder.java
  52. 15 0
      src/main/java/com/sqx/datasource/config/DynamicDataSource.java
  53. 53 0
      src/main/java/com/sqx/datasource/config/DynamicDataSourceConfig.java
  54. 44 0
      src/main/java/com/sqx/datasource/config/DynamicDataSourceFactory.java
  55. 192 0
      src/main/java/com/sqx/datasource/properties/DataSourceProperties.java
  56. 22 0
      src/main/java/com/sqx/datasource/properties/DynamicDataSourceProperties.java
  57. 12 0
      src/main/java/com/sqx/modules/app/annotation/Login.java
  58. 16 0
      src/main/java/com/sqx/modules/app/annotation/LoginUser.java
  59. 38 0
      src/main/java/com/sqx/modules/app/config/WebMvcConfig.java
  60. 70 0
      src/main/java/com/sqx/modules/app/controller/AppUpgradeController.java
  61. 352 0
      src/main/java/com/sqx/modules/app/controller/UserController.java
  62. 36 0
      src/main/java/com/sqx/modules/app/controller/UserMoneyController.java
  63. 46 0
      src/main/java/com/sqx/modules/app/controller/UserMoneyDetailsController.java
  64. 58 0
      src/main/java/com/sqx/modules/app/controller/VipDetailsController.java
  65. 255 0
      src/main/java/com/sqx/modules/app/controller/app/AppController.java
  66. 298 0
      src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java
  67. 51 0
      src/main/java/com/sqx/modules/app/controller/app/AppUserMoneyController.java
  68. 43 0
      src/main/java/com/sqx/modules/app/controller/app/AppUserVipController.java
  69. 46 0
      src/main/java/com/sqx/modules/app/controller/app/AppVipDetailsController.java
  70. 20 0
      src/main/java/com/sqx/modules/app/dao/AppDao.java
  71. 20 0
      src/main/java/com/sqx/modules/app/dao/MsgDao.java
  72. 15 0
      src/main/java/com/sqx/modules/app/dao/UserCashOutDao.java
  73. 58 0
      src/main/java/com/sqx/modules/app/dao/UserDao.java
  74. 25 0
      src/main/java/com/sqx/modules/app/dao/UserMoneyDao.java
  75. 36 0
      src/main/java/com/sqx/modules/app/dao/UserMoneyDetailsDao.java
  76. 9 0
      src/main/java/com/sqx/modules/app/dao/UserVipDao.java
  77. 9 0
      src/main/java/com/sqx/modules/app/dao/VipDetailsDao.java
  78. 35 0
      src/main/java/com/sqx/modules/app/entity/App.java
  79. 23 0
      src/main/java/com/sqx/modules/app/entity/AppUserInfo.java
  80. 27 0
      src/main/java/com/sqx/modules/app/entity/Msg.java
  81. 27 0
      src/main/java/com/sqx/modules/app/entity/UserDetails.java
  82. 237 0
      src/main/java/com/sqx/modules/app/entity/UserEntity.java
  83. 52 0
      src/main/java/com/sqx/modules/app/entity/UserMoney.java
  84. 86 0
      src/main/java/com/sqx/modules/app/entity/UserMoneyDetails.java
  85. 43 0
      src/main/java/com/sqx/modules/app/entity/UserVip.java
  86. 41 0
      src/main/java/com/sqx/modules/app/entity/VipDetails.java
  87. 24 0
      src/main/java/com/sqx/modules/app/form/LoginForm.java
  88. 24 0
      src/main/java/com/sqx/modules/app/form/RegisterForm.java
  89. 73 0
      src/main/java/com/sqx/modules/app/interceptor/AuthorizationInterceptor.java
  90. 44 0
      src/main/java/com/sqx/modules/app/resolver/LoginUserHandlerMethodArgumentResolver.java
  91. 25 0
      src/main/java/com/sqx/modules/app/response/CourseOrderResponse.java
  92. 52 0
      src/main/java/com/sqx/modules/app/response/HomeMessageResponse.java
  93. 20 0
      src/main/java/com/sqx/modules/app/response/TakingOrderResponse.java
  94. 53 0
      src/main/java/com/sqx/modules/app/response/UserFollowResponse.java
  95. 25 0
      src/main/java/com/sqx/modules/app/response/UserMessageResponse.java
  96. 25 0
      src/main/java/com/sqx/modules/app/service/AppService.java
  97. 10 0
      src/main/java/com/sqx/modules/app/service/IAppleService.java
  98. 17 0
      src/main/java/com/sqx/modules/app/service/MsgService.java
  99. 23 0
      src/main/java/com/sqx/modules/app/service/UserMoneyDetailsService.java
  100. 41 0
      src/main/java/com/sqx/modules/app/service/UserMoneyService.java

+ 39 - 0
README.md

@@ -0,0 +1,39 @@
+**项目说明** 
+- sqx-fast是一个轻量级的,前后端分离的Java快速开发平台,能快速开发项目并交付
+- 支持MySQL、PostgreSQL等主流数据库
+<br>
+ 
+
+**具有如下特点** 
+- 友好的代码结构及注释,便于阅读及二次开发
+- 实现前后端分离,通过token进行数据交互,前端再也不用关注后端技术
+- 灵活的权限控制,可控制到页面或按钮,满足绝大部分的权限需求
+- 页面交互使用Vue2.x,极大的提高了开发效率
+- 引入API模板,根据token作为登录令牌,极大的方便了APP接口开发
+- 引入swagger文档支持,方便编写API接口文档
+<br> 
+
+
+**技术选型:** 
+- 核心框架:Spring Boot 2.6
+- 安全框架:Apache Shiro 1.4
+- 视图框架:Spring MVC 5.0
+- 持久层框架:MyBatis 3.3
+- 数据库连接池:Druid 1.0
+- 日志管理:SLF4J 1.7、Log4j
+- 页面交互:Vue2.x 
+<br> 
+
+
+ **后端部署**
+- 通过git下载源码
+- idea、eclipse需安装lombok插件,不然会提示找不到entity的get set方法
+- 创建数据库sqx_fast,数据库编码为UTF-8
+- 执行db/mysql.sql文件,初始化数据
+- 修改application-dev.yml,更新MySQL账号和密码
+- Eclipse、IDEA运行sqxApplication.java,则可启动项目
+- Swagger文档路径:http://localhost:8179/sqx_fast/swagger/index.html
+- Swagger注解路径:http://localhost:8179/sqx_fast/swagger-ui.html
+
+
+<br>

File diff suppressed because it is too large
+ 307 - 0
db/shunfengche.sql


+ 1142 - 0
logs/shunfengche.log

@@ -0,0 +1,1142 @@
+2025-05-14 09:13:41.554  INFO 4056 --- [main] com.sqx.SqxApplication                   : Starting SqxApplication using Java 1.8.0_144 on DESKTOP-3FG01VC with PID 4056 (D:\work\shunfengche\target\classes started by jingang in D:\work\shunfengche)
+2025-05-14 09:13:41.578  INFO 4056 --- [main] com.sqx.SqxApplication                   : The following 1 profile is active: "prod"
+2025-05-14 09:13:43.295  INFO 4056 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2025-05-14 09:13:43.295  INFO 4056 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
+2025-05-14 09:13:43.539  INFO 4056 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 230 ms. Found 2 JPA repository interfaces.
+2025-05-14 09:13:43.562  INFO 4056 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2025-05-14 09:13:43.564  INFO 4056 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2025-05-14 09:13:43.639  INFO 4056 --- [main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.sqx.modules.chats.respository.ChatContentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
+2025-05-14 09:13:43.640  INFO 4056 --- [main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.sqx.modules.chats.respository.ChatRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
+2025-05-14 09:13:43.640  INFO 4056 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 63 ms. Found 0 Redis repository interfaces.
+2025-05-14 09:13:43.862  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'appDao' and 'com.sqx.modules.app.dao.AppDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.862  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'msgDao' and 'com.sqx.modules.app.dao.MsgDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.862  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userCashOutDao' and 'com.sqx.modules.app.dao.UserCashOutDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.863  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userDao' and 'com.sqx.modules.app.dao.UserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.863  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userMoneyDao' and 'com.sqx.modules.app.dao.UserMoneyDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.863  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userMoneyDetailsDao' and 'com.sqx.modules.app.dao.UserMoneyDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.863  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userVipDao' and 'com.sqx.modules.app.dao.UserVipDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.863  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'vipDetailsDao' and 'com.sqx.modules.app.dao.VipDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.864  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'activityDao' and 'com.sqx.modules.banner.dao.ActivityDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.864  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'bannerDao' and 'com.sqx.modules.banner.dao.BannerDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.864  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'chatContentDao' and 'com.sqx.modules.chat.dao.ChatContentDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.864  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'chatConversationDao' and 'com.sqx.modules.chat.dao.ChatConversationDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.864  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'commonInfoDao' and 'com.sqx.modules.common.dao.CommonInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.864  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'creditRecordDao' and 'com.sqx.modules.creditRecord.dao.CreditRecordDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.864  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'driverDao' and 'com.sqx.modules.driver.dao.DriverDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.864  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'driverRouteDao' and 'com.sqx.modules.driver.dao.DriverRouteDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.865  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'fixedStrokeDao' and 'com.sqx.modules.fixedStroke.dao.FixedStrokeDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.865  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'inviteDao' and 'com.sqx.modules.invite.dao.InviteDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.865  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'inviteMoneyDao' and 'com.sqx.modules.invite.dao.InviteMoneyDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.865  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'invoiceDao' and 'com.sqx.modules.invoice.dao.InvoiceDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.865  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'memberDao' and 'com.sqx.modules.member.dao.MemberDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.865  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'activityMessageInfoDao' and 'com.sqx.modules.message.dao.ActivityMessageInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.865  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'messageInfoDao' and 'com.sqx.modules.message.dao.MessageInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.865  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'ordersDao' and 'com.sqx.modules.orders.dao.OrdersDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.866  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'priceRuleDao' and 'com.sqx.modules.orders.dao.PriceRuleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.866  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'cashOutDao' and 'com.sqx.modules.pay.dao.CashOutDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.866  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'payDetailsDao' and 'com.sqx.modules.pay.dao.PayDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.866  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'rechargeConfigDao' and 'com.sqx.modules.rechargeConfig.dao.RechargeConfigDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.866  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysCaptchaDao' and 'com.sqx.modules.sys.dao.SysCaptchaDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.866  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysConfigDao' and 'com.sqx.modules.sys.dao.SysConfigDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.866  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysDictDao' and 'com.sqx.modules.sys.dao.SysDictDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.868  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysLogDao' and 'com.sqx.modules.sys.dao.SysLogDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.868  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysMenuDao' and 'com.sqx.modules.sys.dao.SysMenuDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.868  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysRoleDao' and 'com.sqx.modules.sys.dao.SysRoleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.869  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysRoleMenuDao' and 'com.sqx.modules.sys.dao.SysRoleMenuDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.869  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserDao' and 'com.sqx.modules.sys.dao.SysUserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.869  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserRoleDao' and 'com.sqx.modules.sys.dao.SysUserRoleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.869  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserTokenDao' and 'com.sqx.modules.sys.dao.SysUserTokenDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.869  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserAddressDao' and 'com.sqx.modules.sysUserAddress.dao.SysUserAddressDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.869  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'tbCouponDao' and 'com.sqx.modules.tbCoupon.dao.TbCouponDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.869  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'tbCouponUserDao' and 'com.sqx.modules.tbCoupon.dao.TbCouponUserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.869  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'riderLocationDao' and 'com.sqx.modules.timedtask.dao.RiderLocationDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.869  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'trainingCenterDao' and 'com.sqx.modules.trainingCenter.dao.TrainingCenterDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.869  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userExtensionDao' and 'com.sqx.modules.userExtension.dao.UserExtensionDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:13:43.873  WARN 4056 --- [main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.sqx]' package. Please check your configuration.
+2025-05-14 09:13:44.026  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroConfig' of type [com.sqx.config.ShiroConfig$$EnhancerBySpringCGLIB$$bfe53799] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:44.498  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'mybatis-plus-com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties' of type [com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:44.506  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'mybatisPlusConfig' of type [com.sqx.config.MybatisPlusConfig$$EnhancerBySpringCGLIB$$5d29e675] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:44.512  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'paginationInterceptor' of type [com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:44.523  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration' of type [com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$7b4dd466] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:44.530  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamic-com.sqx.datasource.properties.DynamicDataSourceProperties' of type [com.sqx.datasource.properties.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:44.532  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamicDataSourceConfig' of type [com.sqx.datasource.config.DynamicDataSourceConfig$$EnhancerBySpringCGLIB$$6aa3bb13] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:44.539  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dataSourceProperties' of type [com.sqx.datasource.properties.DataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:48.586  INFO 4056 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
+2025-05-14 09:13:48.587  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamicDataSource' of type [com.sqx.datasource.config.DynamicDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:48.608  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'myMetaObjectHandler' of type [com.sqx.common.utils.MyMetaObjectHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:48.969  WARN 4056 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.banner.dao.BannerDao.selectList] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectList]
+2025-05-14 09:13:48.970  WARN 4056 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.banner.dao.BannerDao.selectPage] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectPage]
+2025-05-14 09:13:49.212  WARN 4056 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.pay.dao.PayDetailsDao.selectById] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectById]
+2025-05-14 09:13:49.399  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sqlSessionFactory' of type [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:49.405  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sqlSessionTemplate' of type [org.mybatis.spring.SqlSessionTemplate] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:49.409  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysMenuDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:49.413  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysMenuDao' of type [com.sun.proxy.$Proxy107] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:49.420  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:49.421  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserDao' of type [com.sun.proxy.$Proxy108] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:49.426  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserTokenDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:49.427  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserTokenDao' of type [com.sun.proxy.$Proxy109] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:49.429  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroServiceImpl' of type [com.sqx.modules.sys.service.impl.ShiroServiceImpl] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:49.430  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'OAuth2Realm' of type [com.sqx.modules.sys.oauth2.OAuth2Realm] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:50.068  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'securityManager' of type [org.apache.shiro.web.mgt.DefaultWebSecurityManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:50.080  INFO 4056 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'authorizationAttributeSourceAdvisor' of type [org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:13:50.355  INFO 4056 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8179 (http)
+2025-05-14 09:13:50.364  INFO 4056 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2025-05-14 09:13:50.364  INFO 4056 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
+2025-05-14 09:13:50.542  INFO 4056 --- [main] o.a.c.c.C.[.[localhost].[/sqx_fast]      : Initializing Spring embedded WebApplicationContext
+2025-05-14 09:13:50.542  INFO 4056 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 8909 ms
+2025-05-14 09:13:50.805  INFO 4056 --- [main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
+2025-05-14 09:13:50.919  INFO 4056 --- [main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.10.Final
+2025-05-14 09:13:51.141  INFO 4056 --- [main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
+2025-05-14 09:13:51.324  INFO 4056 --- [main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
+2025-05-14 09:13:52.510  INFO 4056 --- [main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
+2025-05-14 09:13:52.530  INFO 4056 --- [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
+2025-05-14 09:13:57.462  WARN 4056 --- [main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
+2025-05-14 09:13:57.796  INFO 4056 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2025-05-14 09:13:58.570  INFO 4056 --- [main] org.quartz.impl.StdSchedulerFactory      : Using default implementation for ThreadExecutor
+2025-05-14 09:13:58.584  INFO 4056 --- [main] org.quartz.core.SchedulerSignalerImpl    : Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-05-14 09:13:58.584  INFO 4056 --- [main] org.quartz.core.QuartzScheduler          : Quartz Scheduler v.2.3.0 created.
+2025-05-14 09:13:58.586  INFO 4056 --- [main] org.quartz.simpl.RAMJobStore             : RAMJobStore initialized.
+2025-05-14 09:13:58.586  INFO 4056 --- [main] org.quartz.core.QuartzScheduler          : Scheduler meta-data: Quartz Scheduler (v2.3.0) 'quartzScheduler' with instanceId 'NON_CLUSTERED'
+  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
+  NOT STARTED.
+  Currently in standby mode.
+  Number of jobs executed: 0
+  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
+  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
+
+2025-05-14 09:13:58.587  INFO 4056 --- [main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-05-14 09:13:58.587  INFO 4056 --- [main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler version: 2.3.0
+2025-05-14 09:13:58.587  INFO 4056 --- [main] org.quartz.core.QuartzScheduler          : JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@4dcdc172
+2025-05-14 09:13:58.711  INFO 4056 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8179 (http) with context path '/sqx_fast'
+2025-05-14 09:13:58.712  INFO 4056 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2025-05-14 09:13:58.734  INFO 4056 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2025-05-14 09:13:58.778  INFO 4056 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
+2025-05-14 09:13:58.952  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findTypeUsingGET_1
+2025-05-14 09:13:59.036  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payAppMoneyUsingPOST_1
+2025-05-14 09:13:59.039  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payMemberUsingPOST_1
+2025-05-14 09:13:59.041  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payOrdersUsingPOST_1
+2025-05-14 09:13:59.047  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: notifyJsApiUsingPOST_1
+2025-05-14 09:13:59.048  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: notifyMpUsingPOST_1
+2025-05-14 09:13:59.050  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payAppMoneyUsingPOST_2
+2025-05-14 09:13:59.053  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayJsApiMoneyUsingPOST_1
+2025-05-14 09:13:59.055  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayMpMoneyUsingPOST_1
+2025-05-14 09:13:59.056  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayNotifyUsingPOST_1
+2025-05-14 09:13:59.158  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getExtensionListUsingGET_1
+2025-05-14 09:13:59.176  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getInvoiceInfoUsingGET_1
+2025-05-14 09:13:59.282  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payOrdersUsingPOST_2
+2025-05-14 09:13:59.301  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getConfigInfoUsingGET_1
+2025-05-14 09:13:59.302  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getConfigInfoListUsingGET_1
+2025-05-14 09:13:59.303  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getCouponPageListUsingGET_1
+2025-05-14 09:13:59.306  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMyCouponListUsingGET_1
+2025-05-14 09:13:59.314  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: addBannerUsingPOST_1
+2025-05-14 09:13:59.316  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getBannerUsingGET_1
+2025-05-14 09:13:59.319  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryUserMoneyDetailsUsingGET_1
+2025-05-14 09:13:59.333  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectBannerListUsingGET_1
+2025-05-14 09:13:59.359  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectHelpProfitUsingGET_1
+2025-05-14 09:13:59.361  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeUsingGET_1
+2025-05-14 09:13:59.363  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeByUserIdUsingGET_1
+2025-05-14 09:13:59.368  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: sendMsgUsingGET_1
+2025-05-14 09:13:59.372  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectChatContentUsingGET_1
+2025-05-14 09:13:59.373  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectChatConversationPageUsingGET_1
+2025-05-14 09:13:59.375  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findAllUsingGET_1
+2025-05-14 09:13:59.377  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveBodyUsingPOST_1
+2025-05-14 09:13:59.383  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteUsingGET_1
+2025-05-14 09:13:59.384  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findAllUsingGET_2
+2025-05-14 09:13:59.386  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveBodyUsingPOST_2
+2025-05-14 09:13:59.388  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateBodyUsingPOST_1
+2025-05-14 09:13:59.389  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: userCountUsingGET_1
+2025-05-14 09:13:59.397  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getCommonListUsingGET_1
+2025-05-14 09:13:59.399  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteDriverUsingPOST_1
+2025-05-14 09:13:59.400  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertDriverUsingPOST_1
+2025-05-14 09:13:59.401  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverByUserIdUsingGET_1
+2025-05-14 09:13:59.402  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverListUsingGET_1
+2025-05-14 09:13:59.403  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateDriverUsingPOST_1
+2025-05-14 09:13:59.405  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteDriverRouteUsingPOST_1
+2025-05-14 09:13:59.406  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertDriverRouteUsingPOST_1
+2025-05-14 09:13:59.407  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertMessageByDriverUsingPOST_1
+2025-05-14 09:13:59.408  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverRouteByUserIdUsingGET_1
+2025-05-14 09:13:59.410  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverRouteListUsingGET_1
+2025-05-14 09:13:59.411  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateDriverRouteUsingPOST_1
+2025-05-14 09:13:59.416  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectFixedStrokeListUsingGET_1
+2025-05-14 09:13:59.419  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: mpCreateQrUsingGET_1
+2025-05-14 09:13:59.420  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteAndPosterUsingGET_1
+2025-05-14 09:13:59.421  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteByUserIdListsUsingGET_1
+2025-05-14 09:13:59.422  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteCountUsingGET_1
+2025-05-14 09:13:59.426  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectMemberListUsingGET_1
+2025-05-14 09:13:59.430  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: addMessageUsingPOST_1
+2025-05-14 09:13:59.433  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteMessageUsingGET_1
+2025-05-14 09:13:59.437  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getBodyPageUsingGET_1
+2025-05-14 09:13:59.439  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMessageUsingGET_1
+2025-05-14 09:13:59.441  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMessageListUsingGET_1
+2025-05-14 09:13:59.443  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertMessageUsingPOST_1
+2025-05-14 09:13:59.450  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeUsingGET_2
+2025-05-14 09:13:59.452  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: uUpdateUsingPOST_1
+2025-05-14 09:13:59.454  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: cancelOrdersUsingPOST_1
+2025-05-14 09:13:59.455  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: completeOrdersUsingPOST_1
+2025-05-14 09:13:59.458  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: proceedOrdersUsingPOST_1
+2025-05-14 09:13:59.460  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectMyOrdersListUsingGET_1
+2025-05-14 09:13:59.463  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectOrdersDetailsUsingGET_1
+2025-05-14 09:13:59.465  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectOrdersListUsingGET_1
+2025-05-14 09:13:59.466  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectTeamUserListUsingGET_1
+2025-05-14 09:13:59.467  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: takingOrdersUsingPOST_1
+2025-05-14 09:13:59.467  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: refundUsingPOST_1
+2025-05-14 09:13:59.471  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectPriceRuleListUsingGET_1
+2025-05-14 09:13:59.475  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAddressUsingPOST_1
+2025-05-14 09:13:59.476  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAddressInfoUsingGET_1
+2025-05-14 09:13:59.477  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAddressListUsingGET_1
+2025-05-14 09:13:59.479  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAddressUsingPOST_1
+2025-05-14 09:13:59.499  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserByIdUsingGET_1
+2025-05-14 09:13:59.520  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryUserMoneyDetailsUsingGET_2
+2025-05-14 09:13:59.521  INFO 4056 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserMoneyDetailsUsingGET_1
+2025-05-14 09:13:59.538  INFO 4056 --- [main] o.s.s.quartz.SchedulerFactoryBean        : Starting Quartz Scheduler now
+2025-05-14 09:13:59.538  INFO 4056 --- [main] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-05-14 09:13:59.553  INFO 4056 --- [main] com.sqx.SqxApplication                   : Started SqxApplication in 18.589 seconds (JVM running for 20.879)
+2025-05-14 09:13:59.559  INFO 4056 --- [main] com.sqx.SqxApplication                   : (♥◠‿◠)ノ゙  顺风车项目启动成功   ლ(´ڡ`ლ)゙  
+       _    
+      | |   
+  ___ | | __
+ / _ \| |/ /
+| (_) |   < 
+ \___/|_|\_\
+2025-05-14 09:14:13.283  INFO 4056 --- [http-nio-8179-exec-1] o.a.c.c.C.[.[localhost].[/sqx_fast]      : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-05-14 09:14:13.284  INFO 4056 --- [http-nio-8179-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2025-05-14 09:14:13.287  INFO 4056 --- [http-nio-8179-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 3 ms
+2025-05-14 09:36:14.571  INFO 4056 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-05-14 09:36:15.451  INFO 4056 --- [SpringApplicationShutdownHook] o.s.s.quartz.SchedulerFactoryBean        : Shutting down Quartz Scheduler
+2025-05-14 09:36:15.452  INFO 4056 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2025-05-14 09:36:15.452  INFO 4056 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-05-14 09:36:15.452  INFO 4056 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2025-05-14 09:36:15.489  INFO 4056 --- [SpringApplicationShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
+2025-05-14 09:36:33.714  INFO 10016 --- [main] com.sqx.SqxApplication                   : Starting SqxApplication using Java 1.8.0_144 on DESKTOP-3FG01VC with PID 10016 (D:\work\shunfengche\target\classes started by jingang in D:\work\shunfengche)
+2025-05-14 09:36:33.721  INFO 10016 --- [main] com.sqx.SqxApplication                   : The following 1 profile is active: "prod"
+2025-05-14 09:36:35.407  INFO 10016 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2025-05-14 09:36:35.409  INFO 10016 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
+2025-05-14 09:36:35.640  INFO 10016 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 221 ms. Found 2 JPA repository interfaces.
+2025-05-14 09:36:35.660  INFO 10016 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2025-05-14 09:36:35.661  INFO 10016 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2025-05-14 09:36:35.734  INFO 10016 --- [main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.sqx.modules.chats.respository.ChatContentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
+2025-05-14 09:36:35.735  INFO 10016 --- [main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.sqx.modules.chats.respository.ChatRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
+2025-05-14 09:36:35.735  INFO 10016 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 65 ms. Found 0 Redis repository interfaces.
+2025-05-14 09:36:35.953  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'appDao' and 'com.sqx.modules.app.dao.AppDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.953  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'msgDao' and 'com.sqx.modules.app.dao.MsgDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.953  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userCashOutDao' and 'com.sqx.modules.app.dao.UserCashOutDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.953  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userDao' and 'com.sqx.modules.app.dao.UserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.953  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userMoneyDao' and 'com.sqx.modules.app.dao.UserMoneyDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.953  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userMoneyDetailsDao' and 'com.sqx.modules.app.dao.UserMoneyDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.954  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userVipDao' and 'com.sqx.modules.app.dao.UserVipDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.954  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'vipDetailsDao' and 'com.sqx.modules.app.dao.VipDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.954  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'activityDao' and 'com.sqx.modules.banner.dao.ActivityDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.954  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'bannerDao' and 'com.sqx.modules.banner.dao.BannerDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.954  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'chatContentDao' and 'com.sqx.modules.chat.dao.ChatContentDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.954  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'chatConversationDao' and 'com.sqx.modules.chat.dao.ChatConversationDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.954  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'commonInfoDao' and 'com.sqx.modules.common.dao.CommonInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.954  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'creditRecordDao' and 'com.sqx.modules.creditRecord.dao.CreditRecordDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.954  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'driverDao' and 'com.sqx.modules.driver.dao.DriverDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'driverRouteDao' and 'com.sqx.modules.driver.dao.DriverRouteDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'fixedStrokeDao' and 'com.sqx.modules.fixedStroke.dao.FixedStrokeDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'inviteDao' and 'com.sqx.modules.invite.dao.InviteDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'inviteMoneyDao' and 'com.sqx.modules.invite.dao.InviteMoneyDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'invoiceDao' and 'com.sqx.modules.invoice.dao.InvoiceDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'memberDao' and 'com.sqx.modules.member.dao.MemberDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'activityMessageInfoDao' and 'com.sqx.modules.message.dao.ActivityMessageInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'messageInfoDao' and 'com.sqx.modules.message.dao.MessageInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'ordersDao' and 'com.sqx.modules.orders.dao.OrdersDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'priceRuleDao' and 'com.sqx.modules.orders.dao.PriceRuleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'cashOutDao' and 'com.sqx.modules.pay.dao.CashOutDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.955  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'payDetailsDao' and 'com.sqx.modules.pay.dao.PayDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'rechargeConfigDao' and 'com.sqx.modules.rechargeConfig.dao.RechargeConfigDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysCaptchaDao' and 'com.sqx.modules.sys.dao.SysCaptchaDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysConfigDao' and 'com.sqx.modules.sys.dao.SysConfigDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysDictDao' and 'com.sqx.modules.sys.dao.SysDictDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysLogDao' and 'com.sqx.modules.sys.dao.SysLogDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysMenuDao' and 'com.sqx.modules.sys.dao.SysMenuDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysRoleDao' and 'com.sqx.modules.sys.dao.SysRoleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysRoleMenuDao' and 'com.sqx.modules.sys.dao.SysRoleMenuDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserDao' and 'com.sqx.modules.sys.dao.SysUserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserRoleDao' and 'com.sqx.modules.sys.dao.SysUserRoleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserTokenDao' and 'com.sqx.modules.sys.dao.SysUserTokenDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserAddressDao' and 'com.sqx.modules.sysUserAddress.dao.SysUserAddressDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.956  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'tbCouponDao' and 'com.sqx.modules.tbCoupon.dao.TbCouponDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.957  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'tbCouponUserDao' and 'com.sqx.modules.tbCoupon.dao.TbCouponUserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.957  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'riderLocationDao' and 'com.sqx.modules.timedtask.dao.RiderLocationDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.957  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'trainingCenterDao' and 'com.sqx.modules.trainingCenter.dao.TrainingCenterDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.957  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userExtensionDao' and 'com.sqx.modules.userExtension.dao.UserExtensionDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:36:35.957  WARN 10016 --- [main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.sqx]' package. Please check your configuration.
+2025-05-14 09:36:36.092  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroConfig' of type [com.sqx.config.ShiroConfig$$EnhancerBySpringCGLIB$$4ef535f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:36.510  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'mybatis-plus-com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties' of type [com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:36.520  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'mybatisPlusConfig' of type [com.sqx.config.MybatisPlusConfig$$EnhancerBySpringCGLIB$$a234023b] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:36.527  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'paginationInterceptor' of type [com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:36.542  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration' of type [com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$c057f02c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:36.551  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamic-com.sqx.datasource.properties.DynamicDataSourceProperties' of type [com.sqx.datasource.properties.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:36.553  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamicDataSourceConfig' of type [com.sqx.datasource.config.DynamicDataSourceConfig$$EnhancerBySpringCGLIB$$afadd6d9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:36.560  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dataSourceProperties' of type [com.sqx.datasource.properties.DataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:40.636  INFO 10016 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
+2025-05-14 09:36:40.637  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamicDataSource' of type [com.sqx.datasource.config.DynamicDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:40.655  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'myMetaObjectHandler' of type [com.sqx.common.utils.MyMetaObjectHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:41.014  WARN 10016 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.banner.dao.BannerDao.selectList] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectList]
+2025-05-14 09:36:41.014  WARN 10016 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.banner.dao.BannerDao.selectPage] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectPage]
+2025-05-14 09:36:41.258  WARN 10016 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.pay.dao.PayDetailsDao.selectById] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectById]
+2025-05-14 09:36:41.411  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sqlSessionFactory' of type [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:41.416  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sqlSessionTemplate' of type [org.mybatis.spring.SqlSessionTemplate] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:41.420  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysMenuDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:41.422  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysMenuDao' of type [com.sun.proxy.$Proxy107] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:41.427  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:41.428  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserDao' of type [com.sun.proxy.$Proxy108] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:41.433  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserTokenDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:41.434  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserTokenDao' of type [com.sun.proxy.$Proxy109] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:41.435  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroServiceImpl' of type [com.sqx.modules.sys.service.impl.ShiroServiceImpl] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:41.436  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'OAuth2Realm' of type [com.sqx.modules.sys.oauth2.OAuth2Realm] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:42.041  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'securityManager' of type [org.apache.shiro.web.mgt.DefaultWebSecurityManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:42.055  INFO 10016 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'authorizationAttributeSourceAdvisor' of type [org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:36:42.319  INFO 10016 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8179 (http)
+2025-05-14 09:36:42.326  INFO 10016 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2025-05-14 09:36:42.327  INFO 10016 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
+2025-05-14 09:36:42.457  INFO 10016 --- [main] o.a.c.c.C.[.[localhost].[/sqx_fast]      : Initializing Spring embedded WebApplicationContext
+2025-05-14 09:36:42.458  INFO 10016 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 8638 ms
+2025-05-14 09:36:42.663  INFO 10016 --- [main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
+2025-05-14 09:36:42.708  INFO 10016 --- [main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.10.Final
+2025-05-14 09:36:42.838  INFO 10016 --- [main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
+2025-05-14 09:36:42.956  INFO 10016 --- [main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
+2025-05-14 09:36:43.791  INFO 10016 --- [main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
+2025-05-14 09:36:43.805  INFO 10016 --- [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
+2025-05-14 09:36:46.046  WARN 10016 --- [main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
+2025-05-14 09:36:46.319  INFO 10016 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2025-05-14 09:36:46.901  INFO 10016 --- [main] org.quartz.impl.StdSchedulerFactory      : Using default implementation for ThreadExecutor
+2025-05-14 09:36:46.912  INFO 10016 --- [main] org.quartz.core.SchedulerSignalerImpl    : Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-05-14 09:36:46.913  INFO 10016 --- [main] org.quartz.core.QuartzScheduler          : Quartz Scheduler v.2.3.0 created.
+2025-05-14 09:36:46.913  INFO 10016 --- [main] org.quartz.simpl.RAMJobStore             : RAMJobStore initialized.
+2025-05-14 09:36:46.914  INFO 10016 --- [main] org.quartz.core.QuartzScheduler          : Scheduler meta-data: Quartz Scheduler (v2.3.0) 'quartzScheduler' with instanceId 'NON_CLUSTERED'
+  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
+  NOT STARTED.
+  Currently in standby mode.
+  Number of jobs executed: 0
+  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
+  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
+
+2025-05-14 09:36:46.914  INFO 10016 --- [main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-05-14 09:36:46.914  INFO 10016 --- [main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler version: 2.3.0
+2025-05-14 09:36:46.914  INFO 10016 --- [main] org.quartz.core.QuartzScheduler          : JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@7fd8f21
+2025-05-14 09:36:47.025  INFO 10016 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8179 (http) with context path '/sqx_fast'
+2025-05-14 09:36:47.026  INFO 10016 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2025-05-14 09:36:47.043  INFO 10016 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2025-05-14 09:36:47.077  INFO 10016 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
+2025-05-14 09:36:47.230  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findTypeUsingGET_1
+2025-05-14 09:36:47.310  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payAppMoneyUsingPOST_1
+2025-05-14 09:36:47.312  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payMemberUsingPOST_1
+2025-05-14 09:36:47.313  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payOrdersUsingPOST_1
+2025-05-14 09:36:47.319  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: notifyJsApiUsingPOST_1
+2025-05-14 09:36:47.320  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: notifyMpUsingPOST_1
+2025-05-14 09:36:47.322  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payAppMoneyUsingPOST_2
+2025-05-14 09:36:47.324  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayJsApiMoneyUsingPOST_1
+2025-05-14 09:36:47.326  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayMpMoneyUsingPOST_1
+2025-05-14 09:36:47.327  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayNotifyUsingPOST_1
+2025-05-14 09:36:47.426  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getExtensionListUsingGET_1
+2025-05-14 09:36:47.443  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getInvoiceInfoUsingGET_1
+2025-05-14 09:36:47.544  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payOrdersUsingPOST_2
+2025-05-14 09:36:47.564  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getConfigInfoUsingGET_1
+2025-05-14 09:36:47.565  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getConfigInfoListUsingGET_1
+2025-05-14 09:36:47.566  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getCouponPageListUsingGET_1
+2025-05-14 09:36:47.568  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMyCouponListUsingGET_1
+2025-05-14 09:36:47.576  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: addBannerUsingPOST_1
+2025-05-14 09:36:47.578  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getBannerUsingGET_1
+2025-05-14 09:36:47.581  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryUserMoneyDetailsUsingGET_1
+2025-05-14 09:36:47.592  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectBannerListUsingGET_1
+2025-05-14 09:36:47.615  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectHelpProfitUsingGET_1
+2025-05-14 09:36:47.619  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeUsingGET_1
+2025-05-14 09:36:47.621  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeByUserIdUsingGET_1
+2025-05-14 09:36:47.624  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: sendMsgUsingGET_1
+2025-05-14 09:36:47.628  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectChatContentUsingGET_1
+2025-05-14 09:36:47.629  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectChatConversationPageUsingGET_1
+2025-05-14 09:36:47.632  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findAllUsingGET_1
+2025-05-14 09:36:47.634  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveBodyUsingPOST_1
+2025-05-14 09:36:47.638  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteUsingGET_1
+2025-05-14 09:36:47.640  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findAllUsingGET_2
+2025-05-14 09:36:47.642  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveBodyUsingPOST_2
+2025-05-14 09:36:47.644  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateBodyUsingPOST_1
+2025-05-14 09:36:47.645  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: userCountUsingGET_1
+2025-05-14 09:36:47.652  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getCommonListUsingGET_1
+2025-05-14 09:36:47.655  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteDriverUsingPOST_1
+2025-05-14 09:36:47.655  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertDriverUsingPOST_1
+2025-05-14 09:36:47.656  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverByUserIdUsingGET_1
+2025-05-14 09:36:47.659  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverListUsingGET_1
+2025-05-14 09:36:47.659  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateDriverUsingPOST_1
+2025-05-14 09:36:47.661  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteDriverRouteUsingPOST_1
+2025-05-14 09:36:47.661  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertDriverRouteUsingPOST_1
+2025-05-14 09:36:47.662  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertMessageByDriverUsingPOST_1
+2025-05-14 09:36:47.663  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverRouteByUserIdUsingGET_1
+2025-05-14 09:36:47.665  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverRouteListUsingGET_1
+2025-05-14 09:36:47.666  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateDriverRouteUsingPOST_1
+2025-05-14 09:36:47.674  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectFixedStrokeListUsingGET_1
+2025-05-14 09:36:47.677  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: mpCreateQrUsingGET_1
+2025-05-14 09:36:47.678  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteAndPosterUsingGET_1
+2025-05-14 09:36:47.680  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteByUserIdListsUsingGET_1
+2025-05-14 09:36:47.681  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteCountUsingGET_1
+2025-05-14 09:36:47.685  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectMemberListUsingGET_1
+2025-05-14 09:36:47.689  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: addMessageUsingPOST_1
+2025-05-14 09:36:47.692  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteMessageUsingGET_1
+2025-05-14 09:36:47.696  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getBodyPageUsingGET_1
+2025-05-14 09:36:47.698  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMessageUsingGET_1
+2025-05-14 09:36:47.702  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMessageListUsingGET_1
+2025-05-14 09:36:47.704  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertMessageUsingPOST_1
+2025-05-14 09:36:47.711  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeUsingGET_2
+2025-05-14 09:36:47.714  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: uUpdateUsingPOST_1
+2025-05-14 09:36:47.716  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: cancelOrdersUsingPOST_1
+2025-05-14 09:36:47.717  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: completeOrdersUsingPOST_1
+2025-05-14 09:36:47.720  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: proceedOrdersUsingPOST_1
+2025-05-14 09:36:47.723  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectMyOrdersListUsingGET_1
+2025-05-14 09:36:47.728  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectOrdersDetailsUsingGET_1
+2025-05-14 09:36:47.730  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectOrdersListUsingGET_1
+2025-05-14 09:36:47.732  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectTeamUserListUsingGET_1
+2025-05-14 09:36:47.733  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: takingOrdersUsingPOST_1
+2025-05-14 09:36:47.733  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: refundUsingPOST_1
+2025-05-14 09:36:47.737  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectPriceRuleListUsingGET_1
+2025-05-14 09:36:47.742  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAddressUsingPOST_1
+2025-05-14 09:36:47.743  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAddressInfoUsingGET_1
+2025-05-14 09:36:47.744  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAddressListUsingGET_1
+2025-05-14 09:36:47.745  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAddressUsingPOST_1
+2025-05-14 09:36:47.765  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserByIdUsingGET_1
+2025-05-14 09:36:47.785  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryUserMoneyDetailsUsingGET_2
+2025-05-14 09:36:47.787  INFO 10016 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserMoneyDetailsUsingGET_1
+2025-05-14 09:36:47.799  INFO 10016 --- [main] o.s.s.quartz.SchedulerFactoryBean        : Starting Quartz Scheduler now
+2025-05-14 09:36:47.799  INFO 10016 --- [main] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-05-14 09:36:47.813  INFO 10016 --- [main] com.sqx.SqxApplication                   : Started SqxApplication in 15.268 seconds (JVM running for 20.277)
+2025-05-14 09:36:47.817  INFO 10016 --- [main] com.sqx.SqxApplication                   : (♥◠‿◠)ノ゙  顺风车项目启动成功   ლ(´ڡ`ლ)゙  
+       _    
+      | |   
+  ___ | | __
+ / _ \| |/ /
+| (_) |   < 
+ \___/|_|\_\
+2025-05-14 09:38:33.387  INFO 10016 --- [http-nio-8179-exec-1] o.a.c.c.C.[.[localhost].[/sqx_fast]      : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-05-14 09:38:33.388  INFO 10016 --- [http-nio-8179-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2025-05-14 09:38:33.389  INFO 10016 --- [http-nio-8179-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
+2025-05-14 09:59:34.264  INFO 10016 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-05-14 09:59:35.016  INFO 10016 --- [SpringApplicationShutdownHook] o.s.s.quartz.SchedulerFactoryBean        : Shutting down Quartz Scheduler
+2025-05-14 09:59:35.016  INFO 10016 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2025-05-14 09:59:35.016  INFO 10016 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-05-14 09:59:35.018  INFO 10016 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2025-05-14 09:59:35.055  INFO 10016 --- [SpringApplicationShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
+2025-05-14 09:59:49.486  INFO 12624 --- [main] com.sqx.SqxApplication                   : Starting SqxApplication using Java 1.8.0_144 on DESKTOP-3FG01VC with PID 12624 (D:\work\shunfengche\target\classes started by jingang in D:\work\shunfengche)
+2025-05-14 09:59:49.494  INFO 12624 --- [main] com.sqx.SqxApplication                   : The following 1 profile is active: "prod"
+2025-05-14 09:59:51.414  INFO 12624 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2025-05-14 09:59:51.415  INFO 12624 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
+2025-05-14 09:59:51.702  INFO 12624 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 272 ms. Found 2 JPA repository interfaces.
+2025-05-14 09:59:51.725  INFO 12624 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2025-05-14 09:59:51.727  INFO 12624 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2025-05-14 09:59:51.810  INFO 12624 --- [main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.sqx.modules.chats.respository.ChatContentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
+2025-05-14 09:59:51.811  INFO 12624 --- [main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.sqx.modules.chats.respository.ChatRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
+2025-05-14 09:59:51.811  INFO 12624 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 74 ms. Found 0 Redis repository interfaces.
+2025-05-14 09:59:52.076  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'appDao' and 'com.sqx.modules.app.dao.AppDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.076  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'msgDao' and 'com.sqx.modules.app.dao.MsgDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.076  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userCashOutDao' and 'com.sqx.modules.app.dao.UserCashOutDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.076  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userDao' and 'com.sqx.modules.app.dao.UserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.076  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userMoneyDao' and 'com.sqx.modules.app.dao.UserMoneyDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.076  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userMoneyDetailsDao' and 'com.sqx.modules.app.dao.UserMoneyDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.077  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userVipDao' and 'com.sqx.modules.app.dao.UserVipDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.077  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'vipDetailsDao' and 'com.sqx.modules.app.dao.VipDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.077  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'activityDao' and 'com.sqx.modules.banner.dao.ActivityDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.077  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'bannerDao' and 'com.sqx.modules.banner.dao.BannerDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.079  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'chatContentDao' and 'com.sqx.modules.chat.dao.ChatContentDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.079  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'chatConversationDao' and 'com.sqx.modules.chat.dao.ChatConversationDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.079  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'commonInfoDao' and 'com.sqx.modules.common.dao.CommonInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.079  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'creditRecordDao' and 'com.sqx.modules.creditRecord.dao.CreditRecordDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.079  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'driverDao' and 'com.sqx.modules.driver.dao.DriverDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.079  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'driverRouteDao' and 'com.sqx.modules.driver.dao.DriverRouteDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.079  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'fixedStrokeDao' and 'com.sqx.modules.fixedStroke.dao.FixedStrokeDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.080  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'inviteDao' and 'com.sqx.modules.invite.dao.InviteDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.080  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'inviteMoneyDao' and 'com.sqx.modules.invite.dao.InviteMoneyDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.080  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'invoiceDao' and 'com.sqx.modules.invoice.dao.InvoiceDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.080  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'memberDao' and 'com.sqx.modules.member.dao.MemberDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.080  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'activityMessageInfoDao' and 'com.sqx.modules.message.dao.ActivityMessageInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.080  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'messageInfoDao' and 'com.sqx.modules.message.dao.MessageInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.081  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'ordersDao' and 'com.sqx.modules.orders.dao.OrdersDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.081  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'priceRuleDao' and 'com.sqx.modules.orders.dao.PriceRuleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.081  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'cashOutDao' and 'com.sqx.modules.pay.dao.CashOutDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.081  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'payDetailsDao' and 'com.sqx.modules.pay.dao.PayDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.081  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'rechargeConfigDao' and 'com.sqx.modules.rechargeConfig.dao.RechargeConfigDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.081  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysCaptchaDao' and 'com.sqx.modules.sys.dao.SysCaptchaDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.081  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysConfigDao' and 'com.sqx.modules.sys.dao.SysConfigDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.082  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysDictDao' and 'com.sqx.modules.sys.dao.SysDictDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.082  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysLogDao' and 'com.sqx.modules.sys.dao.SysLogDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.082  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysMenuDao' and 'com.sqx.modules.sys.dao.SysMenuDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.082  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysRoleDao' and 'com.sqx.modules.sys.dao.SysRoleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.082  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysRoleMenuDao' and 'com.sqx.modules.sys.dao.SysRoleMenuDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.082  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserDao' and 'com.sqx.modules.sys.dao.SysUserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.083  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserRoleDao' and 'com.sqx.modules.sys.dao.SysUserRoleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.083  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserTokenDao' and 'com.sqx.modules.sys.dao.SysUserTokenDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.083  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserAddressDao' and 'com.sqx.modules.sysUserAddress.dao.SysUserAddressDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.083  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'tbCouponDao' and 'com.sqx.modules.tbCoupon.dao.TbCouponDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.083  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'tbCouponUserDao' and 'com.sqx.modules.tbCoupon.dao.TbCouponUserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.083  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'riderLocationDao' and 'com.sqx.modules.timedtask.dao.RiderLocationDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.083  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'trainingCenterDao' and 'com.sqx.modules.trainingCenter.dao.TrainingCenterDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.083  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userExtensionDao' and 'com.sqx.modules.userExtension.dao.UserExtensionDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 09:59:52.084  WARN 12624 --- [main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.sqx]' package. Please check your configuration.
+2025-05-14 09:59:52.256  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroConfig' of type [com.sqx.config.ShiroConfig$$EnhancerBySpringCGLIB$$450aefff] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:52.707  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'mybatis-plus-com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties' of type [com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:52.717  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'mybatisPlusConfig' of type [com.sqx.config.MybatisPlusConfig$$EnhancerBySpringCGLIB$$e24f9edb] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:52.723  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'paginationInterceptor' of type [com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:52.734  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration' of type [com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$738ccc] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:52.743  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamic-com.sqx.datasource.properties.DynamicDataSourceProperties' of type [com.sqx.datasource.properties.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:52.745  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamicDataSourceConfig' of type [com.sqx.datasource.config.DynamicDataSourceConfig$$EnhancerBySpringCGLIB$$efc97379] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:52.754  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dataSourceProperties' of type [com.sqx.datasource.properties.DataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:57.249  INFO 12624 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
+2025-05-14 09:59:57.250  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamicDataSource' of type [com.sqx.datasource.config.DynamicDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:57.267  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'myMetaObjectHandler' of type [com.sqx.common.utils.MyMetaObjectHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:57.609  WARN 12624 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.banner.dao.BannerDao.selectList] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectList]
+2025-05-14 09:59:57.610  WARN 12624 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.banner.dao.BannerDao.selectPage] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectPage]
+2025-05-14 09:59:57.845  WARN 12624 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.pay.dao.PayDetailsDao.selectById] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectById]
+2025-05-14 09:59:58.001  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sqlSessionFactory' of type [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.005  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sqlSessionTemplate' of type [org.mybatis.spring.SqlSessionTemplate] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.008  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysMenuDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.012  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysMenuDao' of type [com.sun.proxy.$Proxy107] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.020  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.021  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserDao' of type [com.sun.proxy.$Proxy108] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.025  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserTokenDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.027  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserTokenDao' of type [com.sun.proxy.$Proxy109] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.029  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroServiceImpl' of type [com.sqx.modules.sys.service.impl.ShiroServiceImpl] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.030  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'OAuth2Realm' of type [com.sqx.modules.sys.oauth2.OAuth2Realm] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.622  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'securityManager' of type [org.apache.shiro.web.mgt.DefaultWebSecurityManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.636  INFO 12624 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'authorizationAttributeSourceAdvisor' of type [org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 09:59:58.899  INFO 12624 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8179 (http)
+2025-05-14 09:59:58.908  INFO 12624 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2025-05-14 09:59:58.908  INFO 12624 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
+2025-05-14 09:59:59.047  INFO 12624 --- [main] o.a.c.c.C.[.[localhost].[/sqx_fast]      : Initializing Spring embedded WebApplicationContext
+2025-05-14 09:59:59.047  INFO 12624 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 9446 ms
+2025-05-14 09:59:59.251  INFO 12624 --- [main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
+2025-05-14 09:59:59.294  INFO 12624 --- [main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.10.Final
+2025-05-14 09:59:59.417  INFO 12624 --- [main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
+2025-05-14 09:59:59.533  INFO 12624 --- [main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
+2025-05-14 10:00:00.313  INFO 12624 --- [main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
+2025-05-14 10:00:00.325  INFO 12624 --- [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
+2025-05-14 10:00:02.702  WARN 12624 --- [main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
+2025-05-14 10:00:03.006  INFO 12624 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2025-05-14 10:00:03.659  INFO 12624 --- [main] org.quartz.impl.StdSchedulerFactory      : Using default implementation for ThreadExecutor
+2025-05-14 10:00:03.671  INFO 12624 --- [main] org.quartz.core.SchedulerSignalerImpl    : Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-05-14 10:00:03.672  INFO 12624 --- [main] org.quartz.core.QuartzScheduler          : Quartz Scheduler v.2.3.0 created.
+2025-05-14 10:00:03.672  INFO 12624 --- [main] org.quartz.simpl.RAMJobStore             : RAMJobStore initialized.
+2025-05-14 10:00:03.673  INFO 12624 --- [main] org.quartz.core.QuartzScheduler          : Scheduler meta-data: Quartz Scheduler (v2.3.0) 'quartzScheduler' with instanceId 'NON_CLUSTERED'
+  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
+  NOT STARTED.
+  Currently in standby mode.
+  Number of jobs executed: 0
+  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
+  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
+
+2025-05-14 10:00:03.673  INFO 12624 --- [main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-05-14 10:00:03.674  INFO 12624 --- [main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler version: 2.3.0
+2025-05-14 10:00:03.674  INFO 12624 --- [main] org.quartz.core.QuartzScheduler          : JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@1ca876b7
+2025-05-14 10:00:03.796  INFO 12624 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8179 (http) with context path '/sqx_fast'
+2025-05-14 10:00:03.797  INFO 12624 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2025-05-14 10:00:03.814  INFO 12624 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2025-05-14 10:00:03.850  INFO 12624 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
+2025-05-14 10:00:04.013  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findTypeUsingGET_1
+2025-05-14 10:00:04.099  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payAppMoneyUsingPOST_1
+2025-05-14 10:00:04.100  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payMemberUsingPOST_1
+2025-05-14 10:00:04.102  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payOrdersUsingPOST_1
+2025-05-14 10:00:04.108  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: notifyJsApiUsingPOST_1
+2025-05-14 10:00:04.109  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: notifyMpUsingPOST_1
+2025-05-14 10:00:04.110  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payAppMoneyUsingPOST_2
+2025-05-14 10:00:04.113  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayJsApiMoneyUsingPOST_1
+2025-05-14 10:00:04.115  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayMpMoneyUsingPOST_1
+2025-05-14 10:00:04.116  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayNotifyUsingPOST_1
+2025-05-14 10:00:04.220  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getExtensionListUsingGET_1
+2025-05-14 10:00:04.241  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getInvoiceInfoUsingGET_1
+2025-05-14 10:00:04.360  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payOrdersUsingPOST_2
+2025-05-14 10:00:04.377  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getConfigInfoUsingGET_1
+2025-05-14 10:00:04.380  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getConfigInfoListUsingGET_1
+2025-05-14 10:00:04.381  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getCouponPageListUsingGET_1
+2025-05-14 10:00:04.383  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMyCouponListUsingGET_1
+2025-05-14 10:00:04.390  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: addBannerUsingPOST_1
+2025-05-14 10:00:04.392  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getBannerUsingGET_1
+2025-05-14 10:00:04.394  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryUserMoneyDetailsUsingGET_1
+2025-05-14 10:00:04.407  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectBannerListUsingGET_1
+2025-05-14 10:00:04.432  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectHelpProfitUsingGET_1
+2025-05-14 10:00:04.436  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeUsingGET_1
+2025-05-14 10:00:04.438  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeByUserIdUsingGET_1
+2025-05-14 10:00:04.442  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: sendMsgUsingGET_1
+2025-05-14 10:00:04.447  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectChatContentUsingGET_1
+2025-05-14 10:00:04.448  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectChatConversationPageUsingGET_1
+2025-05-14 10:00:04.450  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findAllUsingGET_1
+2025-05-14 10:00:04.452  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveBodyUsingPOST_1
+2025-05-14 10:00:04.457  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteUsingGET_1
+2025-05-14 10:00:04.459  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findAllUsingGET_2
+2025-05-14 10:00:04.462  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveBodyUsingPOST_2
+2025-05-14 10:00:04.463  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateBodyUsingPOST_1
+2025-05-14 10:00:04.465  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: userCountUsingGET_1
+2025-05-14 10:00:04.473  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getCommonListUsingGET_1
+2025-05-14 10:00:04.475  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteDriverUsingPOST_1
+2025-05-14 10:00:04.476  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertDriverUsingPOST_1
+2025-05-14 10:00:04.477  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverByUserIdUsingGET_1
+2025-05-14 10:00:04.478  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverListUsingGET_1
+2025-05-14 10:00:04.479  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateDriverUsingPOST_1
+2025-05-14 10:00:04.480  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteDriverRouteUsingPOST_1
+2025-05-14 10:00:04.481  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertDriverRouteUsingPOST_1
+2025-05-14 10:00:04.482  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertMessageByDriverUsingPOST_1
+2025-05-14 10:00:04.483  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverRouteByUserIdUsingGET_1
+2025-05-14 10:00:04.486  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverRouteListUsingGET_1
+2025-05-14 10:00:04.488  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateDriverRouteUsingPOST_1
+2025-05-14 10:00:04.493  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectFixedStrokeListUsingGET_1
+2025-05-14 10:00:04.496  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: mpCreateQrUsingGET_1
+2025-05-14 10:00:04.497  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteAndPosterUsingGET_1
+2025-05-14 10:00:04.499  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteByUserIdListsUsingGET_1
+2025-05-14 10:00:04.500  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteCountUsingGET_1
+2025-05-14 10:00:04.504  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectMemberListUsingGET_1
+2025-05-14 10:00:04.509  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: addMessageUsingPOST_1
+2025-05-14 10:00:04.512  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteMessageUsingGET_1
+2025-05-14 10:00:04.517  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getBodyPageUsingGET_1
+2025-05-14 10:00:04.520  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMessageUsingGET_1
+2025-05-14 10:00:04.523  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMessageListUsingGET_1
+2025-05-14 10:00:04.525  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertMessageUsingPOST_1
+2025-05-14 10:00:04.532  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeUsingGET_2
+2025-05-14 10:00:04.535  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: uUpdateUsingPOST_1
+2025-05-14 10:00:04.539  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: cancelOrdersUsingPOST_1
+2025-05-14 10:00:04.540  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: completeOrdersUsingPOST_1
+2025-05-14 10:00:04.544  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: proceedOrdersUsingPOST_1
+2025-05-14 10:00:04.548  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectMyOrdersListUsingGET_1
+2025-05-14 10:00:04.551  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectOrdersDetailsUsingGET_1
+2025-05-14 10:00:04.553  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectOrdersListUsingGET_1
+2025-05-14 10:00:04.554  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectTeamUserListUsingGET_1
+2025-05-14 10:00:04.555  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: takingOrdersUsingPOST_1
+2025-05-14 10:00:04.556  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: refundUsingPOST_1
+2025-05-14 10:00:04.559  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectPriceRuleListUsingGET_1
+2025-05-14 10:00:04.563  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAddressUsingPOST_1
+2025-05-14 10:00:04.565  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAddressInfoUsingGET_1
+2025-05-14 10:00:04.566  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAddressListUsingGET_1
+2025-05-14 10:00:04.567  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAddressUsingPOST_1
+2025-05-14 10:00:04.589  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserByIdUsingGET_1
+2025-05-14 10:00:04.609  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryUserMoneyDetailsUsingGET_2
+2025-05-14 10:00:04.613  INFO 12624 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserMoneyDetailsUsingGET_1
+2025-05-14 10:00:04.629  INFO 12624 --- [main] o.s.s.quartz.SchedulerFactoryBean        : Starting Quartz Scheduler now
+2025-05-14 10:00:04.629  INFO 12624 --- [main] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-05-14 10:00:04.647  INFO 12624 --- [main] com.sqx.SqxApplication                   : Started SqxApplication in 16.889 seconds (JVM running for 21.443)
+2025-05-14 10:00:04.653  INFO 12624 --- [main] com.sqx.SqxApplication                   : (♥◠‿◠)ノ゙  顺风车项目启动成功   ლ(´ڡ`ლ)゙  
+       _    
+      | |   
+  ___ | | __
+ / _ \| |/ /
+| (_) |   < 
+ \___/|_|\_\
+2025-05-14 10:00:08.048  INFO 12624 --- [http-nio-8179-exec-1] o.a.c.c.C.[.[localhost].[/sqx_fast]      : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-05-14 10:00:08.049  INFO 12624 --- [http-nio-8179-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2025-05-14 10:00:08.056  INFO 12624 --- [http-nio-8179-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 6 ms
+2025-05-14 10:00:08.607 ERROR 12624 --- [http-nio-8179-exec-1] c.s.c.exception.SqxExceptionHandler      : null
+
+java.lang.NullPointerException: null
+	at com.sqx.modules.orders.service.impl.OrdersServiceImp.insertOrdersFixedStroke(OrdersServiceImp.java:166) ~[classes/:na]
+	at com.sqx.modules.orders.service.impl.OrdersServiceImp$$FastClassBySpringCGLIB$$b34d9670.invoke(<generated>) ~[classes/:na]
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.22.jar:5.3.22]
+	at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.22.jar:5.3.22]
+	at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.22.jar:5.3.22]
+	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) ~[spring-aop-5.3.22.jar:5.3.22]
+	at com.sqx.modules.orders.service.impl.OrdersServiceImp$$EnhancerBySpringCGLIB$$f53c3e49.insertOrdersFixedStroke(<generated>) ~[classes/:na]
+	at com.sqx.modules.orders.controller.app.AppOrdersController.insertOrdersFixedStroke(AppOrdersController.java:47) ~[classes/:na]
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144]
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_144]
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144]
+	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144]
+	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.22.jar:5.3.22]
+	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.22.jar:5.3.22]
+	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.22.jar:5.3.22]
+	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.22.jar:5.3.22]
+	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.22.jar:5.3.22]
+	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.22.jar:5.3.22]
+	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1070) ~[spring-webmvc-5.3.22.jar:5.3.22]
+	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.22.jar:5.3.22]
+	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.22.jar:5.3.22]
+	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.3.22.jar:5.3.22]
+	at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) [tomcat-embed-core-9.0.65.jar:4.0.FR]
+	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.22.jar:5.3.22]
+	at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.65.jar:4.0.FR]
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) [shiro-core-1.10.1.jar:1.10.1]
+	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) [shiro-core-1.10.1.jar:1.10.1]
+	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) [shiro-core-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at com.sqx.common.xss.XssFilter.doFilter(XssFilter.java:38) [classes/:na]
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) [shiro-core-1.10.1.jar:1.10.1]
+	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) [shiro-core-1.10.1.jar:1.10.1]
+	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) [shiro-core-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370) [shiro-web-1.10.1.jar:1.10.1]
+	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) [shiro-web-1.10.1.jar:1.10.1]
+	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) [spring-web-5.3.22.jar:5.3.22]
+	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) [spring-web-5.3.22.jar:5.3.22]
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.22.jar:5.3.22]
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.22.jar:5.3.22]
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.22.jar:5.3.22]
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.22.jar:5.3.22]
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.22.jar:5.3.22]
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.22.jar:5.3.22]
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.65.jar:9.0.65]
+	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]
+
+2025-05-14 10:03:24.537  INFO 12624 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-05-14 10:03:25.130  INFO 12624 --- [SpringApplicationShutdownHook] o.s.s.quartz.SchedulerFactoryBean        : Shutting down Quartz Scheduler
+2025-05-14 10:03:25.130  INFO 12624 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2025-05-14 10:03:25.130  INFO 12624 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-05-14 10:03:25.130  INFO 12624 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2025-05-14 10:03:25.158  INFO 12624 --- [SpringApplicationShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
+2025-05-14 10:03:33.340  INFO 2300 --- [main] com.sqx.SqxApplication                   : Starting SqxApplication using Java 1.8.0_144 on DESKTOP-3FG01VC with PID 2300 (D:\work\shunfengche\target\classes started by jingang in D:\work\shunfengche)
+2025-05-14 10:03:33.343  INFO 2300 --- [main] com.sqx.SqxApplication                   : The following 1 profile is active: "prod"
+2025-05-14 10:03:34.498  INFO 2300 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2025-05-14 10:03:34.499  INFO 2300 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
+2025-05-14 10:03:34.680  INFO 2300 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 171 ms. Found 2 JPA repository interfaces.
+2025-05-14 10:03:34.694  INFO 2300 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2025-05-14 10:03:34.695  INFO 2300 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2025-05-14 10:03:34.749  INFO 2300 --- [main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.sqx.modules.chats.respository.ChatContentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
+2025-05-14 10:03:34.750  INFO 2300 --- [main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.sqx.modules.chats.respository.ChatRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
+2025-05-14 10:03:34.750  INFO 2300 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 47 ms. Found 0 Redis repository interfaces.
+2025-05-14 10:03:34.904  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'appDao' and 'com.sqx.modules.app.dao.AppDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'msgDao' and 'com.sqx.modules.app.dao.MsgDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userCashOutDao' and 'com.sqx.modules.app.dao.UserCashOutDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userDao' and 'com.sqx.modules.app.dao.UserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userMoneyDao' and 'com.sqx.modules.app.dao.UserMoneyDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userMoneyDetailsDao' and 'com.sqx.modules.app.dao.UserMoneyDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userVipDao' and 'com.sqx.modules.app.dao.UserVipDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'vipDetailsDao' and 'com.sqx.modules.app.dao.VipDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'activityDao' and 'com.sqx.modules.banner.dao.ActivityDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'bannerDao' and 'com.sqx.modules.banner.dao.BannerDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'chatContentDao' and 'com.sqx.modules.chat.dao.ChatContentDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'chatConversationDao' and 'com.sqx.modules.chat.dao.ChatConversationDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'commonInfoDao' and 'com.sqx.modules.common.dao.CommonInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'creditRecordDao' and 'com.sqx.modules.creditRecord.dao.CreditRecordDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.905  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'driverDao' and 'com.sqx.modules.driver.dao.DriverDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.907  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'driverRouteDao' and 'com.sqx.modules.driver.dao.DriverRouteDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.907  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'fixedStrokeDao' and 'com.sqx.modules.fixedStroke.dao.FixedStrokeDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.907  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'inviteDao' and 'com.sqx.modules.invite.dao.InviteDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.907  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'inviteMoneyDao' and 'com.sqx.modules.invite.dao.InviteMoneyDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.907  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'invoiceDao' and 'com.sqx.modules.invoice.dao.InvoiceDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.907  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'memberDao' and 'com.sqx.modules.member.dao.MemberDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.907  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'activityMessageInfoDao' and 'com.sqx.modules.message.dao.ActivityMessageInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.907  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'messageInfoDao' and 'com.sqx.modules.message.dao.MessageInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.907  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'ordersDao' and 'com.sqx.modules.orders.dao.OrdersDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'priceRuleDao' and 'com.sqx.modules.orders.dao.PriceRuleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'cashOutDao' and 'com.sqx.modules.pay.dao.CashOutDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'payDetailsDao' and 'com.sqx.modules.pay.dao.PayDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'rechargeConfigDao' and 'com.sqx.modules.rechargeConfig.dao.RechargeConfigDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysCaptchaDao' and 'com.sqx.modules.sys.dao.SysCaptchaDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysConfigDao' and 'com.sqx.modules.sys.dao.SysConfigDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysDictDao' and 'com.sqx.modules.sys.dao.SysDictDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysLogDao' and 'com.sqx.modules.sys.dao.SysLogDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysMenuDao' and 'com.sqx.modules.sys.dao.SysMenuDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysRoleDao' and 'com.sqx.modules.sys.dao.SysRoleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysRoleMenuDao' and 'com.sqx.modules.sys.dao.SysRoleMenuDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserDao' and 'com.sqx.modules.sys.dao.SysUserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.908  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserRoleDao' and 'com.sqx.modules.sys.dao.SysUserRoleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.909  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserTokenDao' and 'com.sqx.modules.sys.dao.SysUserTokenDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.909  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserAddressDao' and 'com.sqx.modules.sysUserAddress.dao.SysUserAddressDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.909  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'tbCouponDao' and 'com.sqx.modules.tbCoupon.dao.TbCouponDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.909  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'tbCouponUserDao' and 'com.sqx.modules.tbCoupon.dao.TbCouponUserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.909  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'riderLocationDao' and 'com.sqx.modules.timedtask.dao.RiderLocationDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.909  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'trainingCenterDao' and 'com.sqx.modules.trainingCenter.dao.TrainingCenterDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.909  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userExtensionDao' and 'com.sqx.modules.userExtension.dao.UserExtensionDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:03:34.909  WARN 2300 --- [main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.sqx]' package. Please check your configuration.
+2025-05-14 10:03:35.039  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroConfig' of type [com.sqx.config.ShiroConfig$$EnhancerBySpringCGLIB$$fde2b0ca] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:35.380  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'mybatis-plus-com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties' of type [com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:35.389  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'mybatisPlusConfig' of type [com.sqx.config.MybatisPlusConfig$$EnhancerBySpringCGLIB$$9b275fa6] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:35.397  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'paginationInterceptor' of type [com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:35.407  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration' of type [com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$b94b4d97] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:35.413  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamic-com.sqx.datasource.properties.DynamicDataSourceProperties' of type [com.sqx.datasource.properties.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:35.414  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamicDataSourceConfig' of type [com.sqx.datasource.config.DynamicDataSourceConfig$$EnhancerBySpringCGLIB$$a8a13444] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:35.421  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dataSourceProperties' of type [com.sqx.datasource.properties.DataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:39.604  INFO 2300 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
+2025-05-14 10:03:39.605  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamicDataSource' of type [com.sqx.datasource.config.DynamicDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:39.627  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'myMetaObjectHandler' of type [com.sqx.common.utils.MyMetaObjectHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:40.057  WARN 2300 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.banner.dao.BannerDao.selectList] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectList]
+2025-05-14 10:03:40.058  WARN 2300 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.banner.dao.BannerDao.selectPage] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectPage]
+2025-05-14 10:03:40.355  WARN 2300 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.pay.dao.PayDetailsDao.selectById] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectById]
+2025-05-14 10:03:40.549  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sqlSessionFactory' of type [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:40.554  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sqlSessionTemplate' of type [org.mybatis.spring.SqlSessionTemplate] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:40.558  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysMenuDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:40.563  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysMenuDao' of type [com.sun.proxy.$Proxy107] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:40.568  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:40.569  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserDao' of type [com.sun.proxy.$Proxy108] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:40.574  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserTokenDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:40.575  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserTokenDao' of type [com.sun.proxy.$Proxy109] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:40.577  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroServiceImpl' of type [com.sqx.modules.sys.service.impl.ShiroServiceImpl] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:40.578  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'OAuth2Realm' of type [com.sqx.modules.sys.oauth2.OAuth2Realm] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:41.247  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'securityManager' of type [org.apache.shiro.web.mgt.DefaultWebSecurityManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:41.277  INFO 2300 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'authorizationAttributeSourceAdvisor' of type [org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:03:41.634  INFO 2300 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8179 (http)
+2025-05-14 10:03:41.646  INFO 2300 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2025-05-14 10:03:41.646  INFO 2300 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
+2025-05-14 10:03:41.832  INFO 2300 --- [main] o.a.c.c.C.[.[localhost].[/sqx_fast]      : Initializing Spring embedded WebApplicationContext
+2025-05-14 10:03:41.832  INFO 2300 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 8441 ms
+2025-05-14 10:03:42.119  INFO 2300 --- [main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
+2025-05-14 10:03:42.193  INFO 2300 --- [main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.10.Final
+2025-05-14 10:03:42.367  INFO 2300 --- [main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
+2025-05-14 10:03:42.578  INFO 2300 --- [main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
+2025-05-14 10:03:43.895  INFO 2300 --- [main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
+2025-05-14 10:03:43.916  INFO 2300 --- [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
+2025-05-14 10:03:46.901  WARN 2300 --- [main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
+2025-05-14 10:03:47.261  INFO 2300 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2025-05-14 10:03:48.237  INFO 2300 --- [main] org.quartz.impl.StdSchedulerFactory      : Using default implementation for ThreadExecutor
+2025-05-14 10:03:48.256  INFO 2300 --- [main] org.quartz.core.SchedulerSignalerImpl    : Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-05-14 10:03:48.257  INFO 2300 --- [main] org.quartz.core.QuartzScheduler          : Quartz Scheduler v.2.3.0 created.
+2025-05-14 10:03:48.258  INFO 2300 --- [main] org.quartz.simpl.RAMJobStore             : RAMJobStore initialized.
+2025-05-14 10:03:48.260  INFO 2300 --- [main] org.quartz.core.QuartzScheduler          : Scheduler meta-data: Quartz Scheduler (v2.3.0) 'quartzScheduler' with instanceId 'NON_CLUSTERED'
+  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
+  NOT STARTED.
+  Currently in standby mode.
+  Number of jobs executed: 0
+  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
+  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
+
+2025-05-14 10:03:48.260  INFO 2300 --- [main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-05-14 10:03:48.260  INFO 2300 --- [main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler version: 2.3.0
+2025-05-14 10:03:48.261  INFO 2300 --- [main] org.quartz.core.QuartzScheduler          : JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@6f2a13c7
+2025-05-14 10:03:48.459  INFO 2300 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8179 (http) with context path '/sqx_fast'
+2025-05-14 10:03:48.461  INFO 2300 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2025-05-14 10:03:48.493  INFO 2300 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2025-05-14 10:03:48.561  INFO 2300 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
+2025-05-14 10:03:48.826  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findTypeUsingGET_1
+2025-05-14 10:03:48.968  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payAppMoneyUsingPOST_1
+2025-05-14 10:03:48.971  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payMemberUsingPOST_1
+2025-05-14 10:03:48.973  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payOrdersUsingPOST_1
+2025-05-14 10:03:48.982  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: notifyJsApiUsingPOST_1
+2025-05-14 10:03:48.984  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: notifyMpUsingPOST_1
+2025-05-14 10:03:48.986  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payAppMoneyUsingPOST_2
+2025-05-14 10:03:48.990  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayJsApiMoneyUsingPOST_1
+2025-05-14 10:03:48.992  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayMpMoneyUsingPOST_1
+2025-05-14 10:03:48.996  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayNotifyUsingPOST_1
+2025-05-14 10:03:49.160  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getExtensionListUsingGET_1
+2025-05-14 10:03:49.188  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getInvoiceInfoUsingGET_1
+2025-05-14 10:03:49.359  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payOrdersUsingPOST_2
+2025-05-14 10:03:49.386  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getConfigInfoUsingGET_1
+2025-05-14 10:03:49.388  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getConfigInfoListUsingGET_1
+2025-05-14 10:03:49.390  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getCouponPageListUsingGET_1
+2025-05-14 10:03:49.392  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMyCouponListUsingGET_1
+2025-05-14 10:03:49.404  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: addBannerUsingPOST_1
+2025-05-14 10:03:49.407  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getBannerUsingGET_1
+2025-05-14 10:03:49.411  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryUserMoneyDetailsUsingGET_1
+2025-05-14 10:03:49.428  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectBannerListUsingGET_1
+2025-05-14 10:03:49.474  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectHelpProfitUsingGET_1
+2025-05-14 10:03:49.481  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeUsingGET_1
+2025-05-14 10:03:49.484  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeByUserIdUsingGET_1
+2025-05-14 10:03:49.488  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: sendMsgUsingGET_1
+2025-05-14 10:03:49.497  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectChatContentUsingGET_1
+2025-05-14 10:03:49.499  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectChatConversationPageUsingGET_1
+2025-05-14 10:03:49.503  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findAllUsingGET_1
+2025-05-14 10:03:49.506  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveBodyUsingPOST_1
+2025-05-14 10:03:49.512  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteUsingGET_1
+2025-05-14 10:03:49.514  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findAllUsingGET_2
+2025-05-14 10:03:49.518  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveBodyUsingPOST_2
+2025-05-14 10:03:49.520  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateBodyUsingPOST_1
+2025-05-14 10:03:49.522  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: userCountUsingGET_1
+2025-05-14 10:03:49.536  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getCommonListUsingGET_1
+2025-05-14 10:03:49.540  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteDriverUsingPOST_1
+2025-05-14 10:03:49.542  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertDriverUsingPOST_1
+2025-05-14 10:03:49.543  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverByUserIdUsingGET_1
+2025-05-14 10:03:49.545  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverListUsingGET_1
+2025-05-14 10:03:49.546  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateDriverUsingPOST_1
+2025-05-14 10:03:49.548  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteDriverRouteUsingPOST_1
+2025-05-14 10:03:49.549  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertDriverRouteUsingPOST_1
+2025-05-14 10:03:49.551  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertMessageByDriverUsingPOST_1
+2025-05-14 10:03:49.553  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverRouteByUserIdUsingGET_1
+2025-05-14 10:03:49.555  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverRouteListUsingGET_1
+2025-05-14 10:03:49.557  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateDriverRouteUsingPOST_1
+2025-05-14 10:03:49.563  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectFixedStrokeListUsingGET_1
+2025-05-14 10:03:49.567  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: mpCreateQrUsingGET_1
+2025-05-14 10:03:49.568  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteAndPosterUsingGET_1
+2025-05-14 10:03:49.570  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteByUserIdListsUsingGET_1
+2025-05-14 10:03:49.572  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteCountUsingGET_1
+2025-05-14 10:03:49.576  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectMemberListUsingGET_1
+2025-05-14 10:03:49.581  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: addMessageUsingPOST_1
+2025-05-14 10:03:49.585  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteMessageUsingGET_1
+2025-05-14 10:03:49.591  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getBodyPageUsingGET_1
+2025-05-14 10:03:49.593  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMessageUsingGET_1
+2025-05-14 10:03:49.597  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMessageListUsingGET_1
+2025-05-14 10:03:49.602  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertMessageUsingPOST_1
+2025-05-14 10:03:49.617  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeUsingGET_2
+2025-05-14 10:03:49.620  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: uUpdateUsingPOST_1
+2025-05-14 10:03:49.623  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: cancelOrdersUsingPOST_1
+2025-05-14 10:03:49.625  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: completeOrdersUsingPOST_1
+2025-05-14 10:03:49.629  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: proceedOrdersUsingPOST_1
+2025-05-14 10:03:49.633  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectMyOrdersListUsingGET_1
+2025-05-14 10:03:49.638  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectOrdersDetailsUsingGET_1
+2025-05-14 10:03:49.641  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectOrdersListUsingGET_1
+2025-05-14 10:03:49.642  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectTeamUserListUsingGET_1
+2025-05-14 10:03:49.644  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: takingOrdersUsingPOST_1
+2025-05-14 10:03:49.645  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: refundUsingPOST_1
+2025-05-14 10:03:49.652  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectPriceRuleListUsingGET_1
+2025-05-14 10:03:49.657  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAddressUsingPOST_1
+2025-05-14 10:03:49.659  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAddressInfoUsingGET_1
+2025-05-14 10:03:49.661  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAddressListUsingGET_1
+2025-05-14 10:03:49.662  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAddressUsingPOST_1
+2025-05-14 10:03:49.690  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserByIdUsingGET_1
+2025-05-14 10:03:49.717  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryUserMoneyDetailsUsingGET_2
+2025-05-14 10:03:49.719  INFO 2300 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserMoneyDetailsUsingGET_1
+2025-05-14 10:03:49.734  INFO 2300 --- [main] o.s.s.quartz.SchedulerFactoryBean        : Starting Quartz Scheduler now
+2025-05-14 10:03:49.734  INFO 2300 --- [main] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-05-14 10:03:49.752  INFO 2300 --- [main] com.sqx.SqxApplication                   : Started SqxApplication in 16.996 seconds (JVM running for 18.931)
+2025-05-14 10:03:49.756  INFO 2300 --- [main] com.sqx.SqxApplication                   : (♥◠‿◠)ノ゙  顺风车项目启动成功   ლ(´ڡ`ლ)゙  
+       _    
+      | |   
+  ___ | | __
+ / _ \| |/ /
+| (_) |   < 
+ \___/|_|\_\
+2025-05-14 10:03:54.947  INFO 2300 --- [http-nio-8179-exec-1] o.a.c.c.C.[.[localhost].[/sqx_fast]      : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-05-14 10:03:54.947  INFO 2300 --- [http-nio-8179-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2025-05-14 10:03:54.948  INFO 2300 --- [http-nio-8179-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
+2025-05-14 10:08:01.573  INFO 2300 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-05-14 10:08:02.312  INFO 2300 --- [SpringApplicationShutdownHook] o.s.s.quartz.SchedulerFactoryBean        : Shutting down Quartz Scheduler
+2025-05-14 10:08:02.313  INFO 2300 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2025-05-14 10:08:02.313  INFO 2300 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-05-14 10:08:02.313  INFO 2300 --- [SpringApplicationShutdownHook] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2025-05-14 10:08:02.333  INFO 2300 --- [SpringApplicationShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
+2025-05-14 10:08:09.107  INFO 5072 --- [main] com.sqx.SqxApplication                   : Starting SqxApplication using Java 1.8.0_144 on DESKTOP-3FG01VC with PID 5072 (D:\work\shunfengche\target\classes started by jingang in D:\work\shunfengche)
+2025-05-14 10:08:09.110  INFO 5072 --- [main] com.sqx.SqxApplication                   : The following 1 profile is active: "prod"
+2025-05-14 10:08:10.268  INFO 5072 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2025-05-14 10:08:10.269  INFO 5072 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
+2025-05-14 10:08:10.443  INFO 5072 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 165 ms. Found 2 JPA repository interfaces.
+2025-05-14 10:08:10.456  INFO 5072 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2025-05-14 10:08:10.457  INFO 5072 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2025-05-14 10:08:10.514  INFO 5072 --- [main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.sqx.modules.chats.respository.ChatContentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
+2025-05-14 10:08:10.514  INFO 5072 --- [main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.sqx.modules.chats.respository.ChatRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
+2025-05-14 10:08:10.514  INFO 5072 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 50 ms. Found 0 Redis repository interfaces.
+2025-05-14 10:08:10.680  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'appDao' and 'com.sqx.modules.app.dao.AppDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.680  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'msgDao' and 'com.sqx.modules.app.dao.MsgDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.680  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userCashOutDao' and 'com.sqx.modules.app.dao.UserCashOutDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.680  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userDao' and 'com.sqx.modules.app.dao.UserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.680  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userMoneyDao' and 'com.sqx.modules.app.dao.UserMoneyDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.680  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userMoneyDetailsDao' and 'com.sqx.modules.app.dao.UserMoneyDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.680  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userVipDao' and 'com.sqx.modules.app.dao.UserVipDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.680  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'vipDetailsDao' and 'com.sqx.modules.app.dao.VipDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.680  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'activityDao' and 'com.sqx.modules.banner.dao.ActivityDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.680  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'bannerDao' and 'com.sqx.modules.banner.dao.BannerDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'chatContentDao' and 'com.sqx.modules.chat.dao.ChatContentDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'chatConversationDao' and 'com.sqx.modules.chat.dao.ChatConversationDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'commonInfoDao' and 'com.sqx.modules.common.dao.CommonInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'creditRecordDao' and 'com.sqx.modules.creditRecord.dao.CreditRecordDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'driverDao' and 'com.sqx.modules.driver.dao.DriverDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'driverRouteDao' and 'com.sqx.modules.driver.dao.DriverRouteDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'fixedStrokeDao' and 'com.sqx.modules.fixedStroke.dao.FixedStrokeDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'inviteDao' and 'com.sqx.modules.invite.dao.InviteDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'inviteMoneyDao' and 'com.sqx.modules.invite.dao.InviteMoneyDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'invoiceDao' and 'com.sqx.modules.invoice.dao.InvoiceDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'memberDao' and 'com.sqx.modules.member.dao.MemberDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'activityMessageInfoDao' and 'com.sqx.modules.message.dao.ActivityMessageInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'messageInfoDao' and 'com.sqx.modules.message.dao.MessageInfoDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'ordersDao' and 'com.sqx.modules.orders.dao.OrdersDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'priceRuleDao' and 'com.sqx.modules.orders.dao.PriceRuleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'cashOutDao' and 'com.sqx.modules.pay.dao.CashOutDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'payDetailsDao' and 'com.sqx.modules.pay.dao.PayDetailsDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'rechargeConfigDao' and 'com.sqx.modules.rechargeConfig.dao.RechargeConfigDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.681  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysCaptchaDao' and 'com.sqx.modules.sys.dao.SysCaptchaDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysConfigDao' and 'com.sqx.modules.sys.dao.SysConfigDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysDictDao' and 'com.sqx.modules.sys.dao.SysDictDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysLogDao' and 'com.sqx.modules.sys.dao.SysLogDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysMenuDao' and 'com.sqx.modules.sys.dao.SysMenuDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysRoleDao' and 'com.sqx.modules.sys.dao.SysRoleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysRoleMenuDao' and 'com.sqx.modules.sys.dao.SysRoleMenuDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserDao' and 'com.sqx.modules.sys.dao.SysUserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserRoleDao' and 'com.sqx.modules.sys.dao.SysUserRoleDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserTokenDao' and 'com.sqx.modules.sys.dao.SysUserTokenDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'sysUserAddressDao' and 'com.sqx.modules.sysUserAddress.dao.SysUserAddressDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'tbCouponDao' and 'com.sqx.modules.tbCoupon.dao.TbCouponDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'tbCouponUserDao' and 'com.sqx.modules.tbCoupon.dao.TbCouponUserDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'riderLocationDao' and 'com.sqx.modules.timedtask.dao.RiderLocationDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'trainingCenterDao' and 'com.sqx.modules.trainingCenter.dao.TrainingCenterDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.683  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userExtensionDao' and 'com.sqx.modules.userExtension.dao.UserExtensionDao' mapperInterface. Bean already defined with the same name!
+2025-05-14 10:08:10.684  WARN 5072 --- [main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.sqx]' package. Please check your configuration.
+2025-05-14 10:08:10.837  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroConfig' of type [com.sqx.config.ShiroConfig$$EnhancerBySpringCGLIB$$4f96abc9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:11.206  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'mybatis-plus-com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties' of type [com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:11.214  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'mybatisPlusConfig' of type [com.sqx.config.MybatisPlusConfig$$EnhancerBySpringCGLIB$$ecdb5aa5] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:11.219  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'paginationInterceptor' of type [com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:11.229  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration' of type [com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$aff4896] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:11.236  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamic-com.sqx.datasource.properties.DynamicDataSourceProperties' of type [com.sqx.datasource.properties.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:11.237  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamicDataSourceConfig' of type [com.sqx.datasource.config.DynamicDataSourceConfig$$EnhancerBySpringCGLIB$$fa552f43] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:11.244  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dataSourceProperties' of type [com.sqx.datasource.properties.DataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:15.385  INFO 5072 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
+2025-05-14 10:08:15.387  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dynamicDataSource' of type [com.sqx.datasource.config.DynamicDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:15.420  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'myMetaObjectHandler' of type [com.sqx.common.utils.MyMetaObjectHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:15.930  WARN 5072 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.banner.dao.BannerDao.selectList] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectList]
+2025-05-14 10:08:15.931  WARN 5072 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.banner.dao.BannerDao.selectPage] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectPage]
+2025-05-14 10:08:16.241  WARN 5072 --- [main] c.b.m.core.injector.AbstractMethod       : [com.sqx.modules.pay.dao.PayDetailsDao.selectById] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [class com.baomidou.mybatisplus.core.injector.methods.SelectById]
+2025-05-14 10:08:16.507  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sqlSessionFactory' of type [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:16.514  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sqlSessionTemplate' of type [org.mybatis.spring.SqlSessionTemplate] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:16.519  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysMenuDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:16.523  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysMenuDao' of type [com.sun.proxy.$Proxy107] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:16.530  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:16.531  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserDao' of type [com.sun.proxy.$Proxy108] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:16.537  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserTokenDao' of type [org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:16.539  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'sysUserTokenDao' of type [com.sun.proxy.$Proxy109] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:16.541  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroServiceImpl' of type [com.sqx.modules.sys.service.impl.ShiroServiceImpl] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:16.543  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'OAuth2Realm' of type [com.sqx.modules.sys.oauth2.OAuth2Realm] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:17.543  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'securityManager' of type [org.apache.shiro.web.mgt.DefaultWebSecurityManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:17.563  INFO 5072 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'authorizationAttributeSourceAdvisor' of type [org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-05-14 10:08:17.924  INFO 5072 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8179 (http)
+2025-05-14 10:08:17.935  INFO 5072 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2025-05-14 10:08:17.935  INFO 5072 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
+2025-05-14 10:08:18.122  INFO 5072 --- [main] o.a.c.c.C.[.[localhost].[/sqx_fast]      : Initializing Spring embedded WebApplicationContext
+2025-05-14 10:08:18.122  INFO 5072 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 8966 ms
+2025-05-14 10:08:18.406  INFO 5072 --- [main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
+2025-05-14 10:08:18.466  INFO 5072 --- [main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.10.Final
+2025-05-14 10:08:18.635  INFO 5072 --- [main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
+2025-05-14 10:08:18.835  INFO 5072 --- [main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
+2025-05-14 10:08:19.950  INFO 5072 --- [main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
+2025-05-14 10:08:19.967  INFO 5072 --- [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
+2025-05-14 10:08:22.857  WARN 5072 --- [main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
+2025-05-14 10:08:23.217  INFO 5072 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2025-05-14 10:08:24.121  INFO 5072 --- [main] org.quartz.impl.StdSchedulerFactory      : Using default implementation for ThreadExecutor
+2025-05-14 10:08:24.138  INFO 5072 --- [main] org.quartz.core.SchedulerSignalerImpl    : Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-05-14 10:08:24.139  INFO 5072 --- [main] org.quartz.core.QuartzScheduler          : Quartz Scheduler v.2.3.0 created.
+2025-05-14 10:08:24.141  INFO 5072 --- [main] org.quartz.simpl.RAMJobStore             : RAMJobStore initialized.
+2025-05-14 10:08:24.142  INFO 5072 --- [main] org.quartz.core.QuartzScheduler          : Scheduler meta-data: Quartz Scheduler (v2.3.0) 'quartzScheduler' with instanceId 'NON_CLUSTERED'
+  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
+  NOT STARTED.
+  Currently in standby mode.
+  Number of jobs executed: 0
+  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
+  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
+
+2025-05-14 10:08:24.142  INFO 5072 --- [main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-05-14 10:08:24.142  INFO 5072 --- [main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler version: 2.3.0
+2025-05-14 10:08:24.142  INFO 5072 --- [main] org.quartz.core.QuartzScheduler          : JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@c04b755
+2025-05-14 10:08:24.322  INFO 5072 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8179 (http) with context path '/sqx_fast'
+2025-05-14 10:08:24.325  INFO 5072 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2025-05-14 10:08:24.360  INFO 5072 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2025-05-14 10:08:24.441  INFO 5072 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
+2025-05-14 10:08:24.497  INFO 5072 --- [http-nio-8179-exec-2] o.a.c.c.C.[.[localhost].[/sqx_fast]      : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-05-14 10:08:24.497  INFO 5072 --- [http-nio-8179-exec-2] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2025-05-14 10:08:24.500  INFO 5072 --- [http-nio-8179-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 3 ms
+2025-05-14 10:08:24.893  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findTypeUsingGET_1
+2025-05-14 10:08:25.266  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payAppMoneyUsingPOST_1
+2025-05-14 10:08:25.274  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payMemberUsingPOST_1
+2025-05-14 10:08:25.280  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payOrdersUsingPOST_1
+2025-05-14 10:08:25.318  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: notifyJsApiUsingPOST_1
+2025-05-14 10:08:25.323  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: notifyMpUsingPOST_1
+2025-05-14 10:08:25.331  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payAppMoneyUsingPOST_2
+2025-05-14 10:08:25.345  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayJsApiMoneyUsingPOST_1
+2025-05-14 10:08:25.351  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayMpMoneyUsingPOST_1
+2025-05-14 10:08:25.355  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: wxPayNotifyUsingPOST_1
+2025-05-14 10:08:25.581  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getExtensionListUsingGET_1
+2025-05-14 10:08:25.623  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getInvoiceInfoUsingGET_1
+2025-05-14 10:08:25.835  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: payOrdersUsingPOST_2
+2025-05-14 10:08:25.874  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getConfigInfoUsingGET_1
+2025-05-14 10:08:25.880  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getConfigInfoListUsingGET_1
+2025-05-14 10:08:25.883  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getCouponPageListUsingGET_1
+2025-05-14 10:08:25.886  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMyCouponListUsingGET_1
+2025-05-14 10:08:25.902  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: addBannerUsingPOST_1
+2025-05-14 10:08:25.907  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getBannerUsingGET_1
+2025-05-14 10:08:25.915  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryUserMoneyDetailsUsingGET_1
+2025-05-14 10:08:25.939  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectBannerListUsingGET_1
+2025-05-14 10:08:25.986  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectHelpProfitUsingGET_1
+2025-05-14 10:08:25.992  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeUsingGET_1
+2025-05-14 10:08:25.995  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeByUserIdUsingGET_1
+2025-05-14 10:08:26.004  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: sendMsgUsingGET_1
+2025-05-14 10:08:26.013  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectChatContentUsingGET_1
+2025-05-14 10:08:26.014  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectChatConversationPageUsingGET_1
+2025-05-14 10:08:26.020  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findAllUsingGET_1
+2025-05-14 10:08:26.026  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveBodyUsingPOST_1
+2025-05-14 10:08:26.036  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteUsingGET_1
+2025-05-14 10:08:26.042  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findAllUsingGET_2
+2025-05-14 10:08:26.052  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveBodyUsingPOST_2
+2025-05-14 10:08:26.056  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateBodyUsingPOST_1
+2025-05-14 10:08:26.060  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: userCountUsingGET_1
+2025-05-14 10:08:26.076  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getCommonListUsingGET_1
+2025-05-14 10:08:26.083  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteDriverUsingPOST_1
+2025-05-14 10:08:26.085  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertDriverUsingPOST_1
+2025-05-14 10:08:26.087  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverByUserIdUsingGET_1
+2025-05-14 10:08:26.091  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverListUsingGET_1
+2025-05-14 10:08:26.093  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateDriverUsingPOST_1
+2025-05-14 10:08:26.099  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteDriverRouteUsingPOST_1
+2025-05-14 10:08:26.102  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertDriverRouteUsingPOST_1
+2025-05-14 10:08:26.105  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertMessageByDriverUsingPOST_1
+2025-05-14 10:08:26.108  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverRouteByUserIdUsingGET_1
+2025-05-14 10:08:26.113  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectDriverRouteListUsingGET_1
+2025-05-14 10:08:26.116  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: updateDriverRouteUsingPOST_1
+2025-05-14 10:08:26.128  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectFixedStrokeListUsingGET_1
+2025-05-14 10:08:26.135  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: mpCreateQrUsingGET_1
+2025-05-14 10:08:26.138  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteAndPosterUsingGET_1
+2025-05-14 10:08:26.144  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteByUserIdListsUsingGET_1
+2025-05-14 10:08:26.146  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectInviteCountUsingGET_1
+2025-05-14 10:08:26.155  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectMemberListUsingGET_1
+2025-05-14 10:08:26.165  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: addMessageUsingPOST_1
+2025-05-14 10:08:26.170  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteMessageUsingGET_1
+2025-05-14 10:08:26.181  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getBodyPageUsingGET_1
+2025-05-14 10:08:26.185  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMessageUsingGET_1
+2025-05-14 10:08:26.194  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getMessageListUsingGET_1
+2025-05-14 10:08:26.198  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: insertMessageUsingPOST_1
+2025-05-14 10:08:26.215  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserRechargeUsingGET_2
+2025-05-14 10:08:26.219  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: uUpdateUsingPOST_1
+2025-05-14 10:08:26.227  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: cancelOrdersUsingPOST_1
+2025-05-14 10:08:26.229  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: completeOrdersUsingPOST_1
+2025-05-14 10:08:26.235  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: proceedOrdersUsingPOST_1
+2025-05-14 10:08:26.238  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectMyOrdersListUsingGET_1
+2025-05-14 10:08:26.243  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectOrdersDetailsUsingGET_1
+2025-05-14 10:08:26.247  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectOrdersListUsingGET_1
+2025-05-14 10:08:26.249  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectTeamUserListUsingGET_1
+2025-05-14 10:08:26.252  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: takingOrdersUsingPOST_1
+2025-05-14 10:08:26.254  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: refundUsingPOST_1
+2025-05-14 10:08:26.261  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectPriceRuleListUsingGET_1
+2025-05-14 10:08:26.269  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAddressUsingPOST_1
+2025-05-14 10:08:26.271  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAddressInfoUsingGET_1
+2025-05-14 10:08:26.275  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAddressListUsingGET_1
+2025-05-14 10:08:26.277  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAddressUsingPOST_1
+2025-05-14 10:08:26.313  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserByIdUsingGET_1
+2025-05-14 10:08:26.348  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryUserMoneyDetailsUsingGET_2
+2025-05-14 10:08:26.351  INFO 5072 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: selectUserMoneyDetailsUsingGET_1
+2025-05-14 10:08:26.376  INFO 5072 --- [main] o.s.s.quartz.SchedulerFactoryBean        : Starting Quartz Scheduler now
+2025-05-14 10:08:26.376  INFO 5072 --- [main] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-05-14 10:08:26.401  INFO 5072 --- [main] com.sqx.SqxApplication                   : Started SqxApplication in 17.904 seconds (JVM running for 19.74)
+2025-05-14 10:08:26.410  INFO 5072 --- [main] com.sqx.SqxApplication                   : (♥◠‿◠)ノ゙  顺风车项目启动成功   ლ(´ڡ`ლ)゙  
+       _    
+      | |   
+  ___ | | __
+ / _ \| |/ /
+| (_) |   < 
+ \___/|_|\_\

BIN
logs/shunfengche.log.2025-05-12.0.gz


BIN
logs/shunfengche.log.2025-05-13.0.gz


+ 536 - 0
pom.xml

@@ -0,0 +1,536 @@
+<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>com.sqx</groupId>
+	<artifactId>shunfengche</artifactId>
+	<version>1.0</version>
+	<packaging>jar</packaging>
+	<description>顺风车</description>
+
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.6.11</version>
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+		<java.version>1.8</java.version>
+		<mybatisplus.version>3.2.0</mybatisplus.version>
+		<mysql.version>8.0.17</mysql.version>
+		<mssql.version>4.0</mssql.version>
+		<oracle.version>11.2.0.3</oracle.version>
+		<druid.version>1.1.13</druid.version>
+		<quartz.version>2.3.0</quartz.version>
+		<commons.lang.version>2.6</commons.lang.version>
+		<commons.fileupload.version>1.2.2</commons.fileupload.version>
+		<commons.io.version>2.5</commons.io.version>
+		<commons.codec.version>1.10</commons.codec.version>
+		<commons.configuration.version>1.10</commons.configuration.version>
+		<shiro.version>1.10.1</shiro.version>
+		<jwt.version>0.7.0</jwt.version>
+		<kaptcha.version>0.0.9</kaptcha.version>
+		<qiniu.version>7.2.23</qiniu.version>
+		<aliyun.oss.version>3.4.0</aliyun.oss.version>
+		<qcloud.cos.version>4.4</qcloud.cos.version>
+		<swagger.version>2.7.0</swagger.version>
+		<joda.time.version>2.9.9</joda.time.version>
+		<gson.version>2.8.5</gson.version>
+		<fastjson.version>1.2.83</fastjson.version>
+		<hutool.version>4.1.1</hutool.version>
+		<lombok.version>1.18.4</lombok.version>
+
+
+		<!--wagon plugin 配置-->
+		<!--<service-path>/work/sz</service-path>
+		<pack-name>${project.artifactId}-${project.version}.jar</pack-name>
+		<remote-addr>192.168.1.10:22</remote-addr>
+		<remote-username>root</remote-username>
+		<remote-passwd>123456</remote-passwd>-->
+	</properties>
+
+	<dependencies>
+
+		<dependency>
+			<groupId>com.aliyun</groupId>
+			<artifactId>dyplsapi20170525</artifactId>
+			<version>2.0.3</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.aliyun</groupId>
+			<artifactId>dyvmsapi20170525</artifactId>
+			<version>2.1.4</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.baidu.aip</groupId>
+			<artifactId>java-sdk</artifactId>
+			<version>4.16.14</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.slf4j</groupId>
+					<artifactId>slf4j-api</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.slf4j</groupId>
+					<artifactId>slf4j-simple</artifactId>
+				</exclusion>
+			</exclusions>
+
+		</dependency>
+
+		<dependency>
+			<groupId>com.github.wechatpay-apiv3</groupId>
+			<artifactId>wechatpay-java</artifactId>
+			<version>0.2.14</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.github.kuaidi100-api</groupId>
+			<artifactId>sdk</artifactId>
+			<version>1.0.11</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org</groupId>
+			<artifactId>jaudiotagger</artifactId>
+			<version>2.0.3</version>
+		</dependency>
+		<dependency>
+			<groupId>org.mybatis</groupId>
+			<artifactId>mybatis-typehandlers-jsr310</artifactId>
+			<version>1.0.1</version>
+		</dependency>
+		<dependency>
+			<groupId>org.hibernate.validator</groupId>
+			<artifactId>hibernate-validator</artifactId>
+			<version>6.2.3.Final</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-websocket</artifactId>
+			<version>5.1.2.RELEASE</version>
+		</dependency>
+		<dependency>
+			<groupId>cn.afterturn</groupId>
+			<artifactId>easypoi-spring-boot-starter</artifactId>
+			<version>4.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>net.java.dev.jna</groupId>
+			<artifactId>jna</artifactId>
+			<version>5.5.0</version>
+		</dependency>
+		<dependency>
+			<groupId>net.java.dev.jna</groupId>
+			<artifactId>jna-platform</artifactId>
+			<version>5.5.0</version>
+		</dependency>
+		<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>druid</artifactId>
+			<version>1.1.10</version>
+		</dependency>
+		<!-- 苹果工具类 -->
+		<dependency>
+			<groupId>com.auth0</groupId>
+			<artifactId>java-jwt</artifactId>
+			<version>3.8.3</version>
+		</dependency>
+		<dependency>
+			<groupId>com.auth0</groupId>
+			<artifactId>jwks-rsa</artifactId>
+			<version>0.12.0</version>
+		</dependency>
+		<dependency>
+			<groupId>io.jsonwebtoken</groupId>
+			<artifactId>jjwt</artifactId>
+			<version>0.9.0</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.json-lib</groupId>
+			<artifactId>json-lib</artifactId>
+			<version>2.4</version>
+			<classifier>jdk15</classifier>
+		</dependency>
+		<!-- excel工具类 -->
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi</artifactId>
+			<version>4.0.1</version>
+		</dependency>
+		<!-- excel工具类 -->
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml</artifactId>
+			<version>4.0.1</version>
+		</dependency>
+		<dependency>
+			<groupId>com.github.qcloudsms</groupId>
+			<artifactId>qcloudsms</artifactId>
+			<version>1.0.6</version>
+		</dependency>
+		<!--阿里云短信-->
+		<dependency>
+			<groupId>com.aliyun</groupId>
+			<artifactId>aliyun-java-sdk-core</artifactId>
+			<version>4.5.3</version>
+		</dependency>
+		<dependency>
+			<groupId>com.aliyun.oss</groupId>
+			<artifactId>aliyun-sdk-oss</artifactId>
+			<version>3.4.0</version>
+		</dependency>
+		<!-- 集成支付宝sdk -->
+		<dependency>
+			<groupId>com.alipay.sdk</groupId>
+			<artifactId>alipay-sdk-java</artifactId>
+			<version>4.10.29.ALL</version>
+		</dependency>
+		<dependency>
+			<groupId>com.github.wxpay</groupId>
+			<artifactId>wxpay-sdk</artifactId>
+			<version>0.0.3</version>
+		</dependency>
+		<dependency>
+			<groupId>com.github.liyiorg</groupId>
+			<artifactId>weixin-popular</artifactId>
+			<version>2.8.25</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-aop</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-context-support</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-redis</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-configuration-processor</artifactId>
+			<optional>true</optional>
+		</dependency>
+		<!--<dependency>-->
+			<!--<groupId>org.springframework.boot</groupId>-->
+			<!--<artifactId>spring-boot-devtools</artifactId>-->
+			<!--<optional>true</optional>-->
+		<!--</dependency>-->
+		<dependency>
+			<groupId>com.baomidou</groupId>
+			<artifactId>mybatis-plus-boot-starter</artifactId>
+			<version>${mybatisplus.version}</version>
+			<exclusions>
+				<exclusion>
+					<groupId>com.baomidou</groupId>
+					<artifactId>mybatis-plus-generator</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<version>${mysql.version}</version>
+		</dependency>
+		 <!--oracle驱动-->
+		<dependency>
+			<groupId>com.oracle</groupId>
+			<artifactId>ojdbc6</artifactId>
+			<version>${oracle.version}</version>
+		</dependency>
+		 <!--mssql驱动-->
+		<dependency>
+			<groupId>com.microsoft.sqlserver</groupId>
+			<artifactId>sqljdbc4</artifactId>
+			<version>${mssql.version}</version>
+		</dependency>
+		 <!--postgresql驱动-->
+		<dependency>
+			<groupId>org.postgresql</groupId>
+			<artifactId>postgresql</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>druid-spring-boot-starter</artifactId>
+			<version>${druid.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.quartz-scheduler</groupId>
+			<artifactId>quartz</artifactId>
+			<version>${quartz.version}</version>
+			<exclusions>
+				<exclusion>
+					<groupId>com.mchange</groupId>
+					<artifactId>c3p0</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+			<version>${commons.lang.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-fileupload</groupId>
+			<artifactId>commons-fileupload</artifactId>
+			<version>${commons.fileupload.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>${commons.io.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-codec</groupId>
+			<artifactId>commons-codec</artifactId>
+			<version>${commons.codec.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-configuration</groupId>
+			<artifactId>commons-configuration</artifactId>
+			<version>${commons.configuration.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.shiro</groupId>
+			<artifactId>shiro-core</artifactId>
+			<version>${shiro.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.shiro</groupId>
+			<artifactId>shiro-spring</artifactId>
+			<version>${shiro.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.github.axet</groupId>
+			<artifactId>kaptcha</artifactId>
+			<version>${kaptcha.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>${swagger.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>${swagger.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.qiniu</groupId>
+			<artifactId>qiniu-java-sdk</artifactId>
+			<version>${qiniu.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.qcloud</groupId>
+			<artifactId>cos_api</artifactId>
+			<version>${qcloud.cos.version}</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.slf4j</groupId>
+					<artifactId>slf4j-log4j12</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>joda-time</groupId>
+			<artifactId>joda-time</artifactId>
+			<version>${joda.time.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.code.gson</groupId>
+			<artifactId>gson</artifactId>
+			<version>${gson.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>fastjson</artifactId>
+			<version>${fastjson.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>cn.hutool</groupId>
+			<artifactId>hutool-all</artifactId>
+			<version>${hutool.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>${lombok.version}</version>
+		</dependency>
+
+		<!--二维码生成架包引用-->
+		<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
+		<dependency>
+			<groupId>com.google.zxing</groupId>
+			<artifactId>core</artifactId>
+			<version>3.3.3</version>
+		</dependency>
+		<!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
+		<dependency>
+			<groupId>com.google.zxing</groupId>
+			<artifactId>javase</artifactId>
+			<version>3.3.3</version>
+		</dependency>
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-mp</artifactId>
+            <version>3.6.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-pay</artifactId>
+            <version>3.6.0</version>
+        </dependency>
+		<dependency>
+			<groupId>com.github.pagehelper</groupId>
+			<artifactId>pagehelper-spring-boot-starter</artifactId>
+			<version>1.2.5</version>
+			<exclusions>
+				<exclusion>
+					<artifactId>mybatis-spring</artifactId>
+					<groupId>org.mybatis</groupId>
+				</exclusion>
+				<exclusion>
+					<artifactId>mybatis</artifactId>
+					<groupId>org.mybatis</groupId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>com.github.dozermapper</groupId>
+			<artifactId>dozer-core</artifactId>
+			<version>6.4.1</version>
+		</dependency>
+		<dependency>
+			<groupId>com.getui.push</groupId>
+			<artifactId>restful-sdk</artifactId>
+			<version>1.0.0.1</version>
+		</dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+		<dependency>
+			<groupId>org.gavaghan</groupId>
+			<artifactId>geodesy</artifactId>
+			<version>1.1.3</version>
+		</dependency>
+        <!--<dependency>-->
+			<!--<groupId>com.baidu.aip</groupId>-->
+<!--            <artifactId>java-sdk</artifactId>-->
+<!--            <version>4.11.3</version>-->
+		<!--</dependency>-->
+	</dependencies>
+
+	<build>
+		<finalName>${project.artifactId}</finalName>
+		<extensions>
+			<extension>
+				<groupId>org.apache.maven.wagon</groupId>
+				<artifactId>wagon-ssh</artifactId>
+				<version>2.8</version>
+			</extension>
+		</extensions>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+				<configuration>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+			<!-- 跳过单元测试 -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<configuration>
+					<skipTests>true</skipTests>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>wagon-maven-plugin</artifactId>
+				<version>1.0</version>
+				<!--<configuration>
+					<fromFile>target/${pack-name}</fromFile>
+					<url><![CDATA[scp://${remote-username}:${remote-passwd}@${remote-addr}${service-path}]]></url>
+					<commands>
+						&lt;!&ndash; Kill Old Process &ndash;&gt;
+						<command>kill -9 `ps -ef |grep ${project.artifactId}.jar|grep -v "grep" |awk '{print $2}'`</command>
+						<command><![CDATA[nohup java -jar ${service-path}/${pack-name} &#45;&#45;spring.profiles.active=test > ${service-path}/sz.log 2>&1 & ]]></command>
+						<command><![CDATA[netstat -nptl]]></command>
+						<command><![CDATA[ps -ef | grep java | grep -v grep]]></command>
+					</commands>
+					&lt;!&ndash; 运行命令 mvn clean package wagon:upload-single wagon:sshexec&ndash;&gt;
+					<displayCommandOutputs>true</displayCommandOutputs>
+				</configuration>-->
+			</plugin>
+
+			<plugin>
+				<groupId>com.spotify</groupId>
+				<artifactId>docker-maven-plugin</artifactId>
+				<version>0.4.14</version>
+				<!--<executions>-->
+					<!--<execution>-->
+						<!--<phase>package</phase>-->
+						<!--<goals>-->
+							<!--<goal>build</goal>-->
+						<!--</goals>-->
+					<!--</execution>-->
+				<!--</executions>-->
+				<configuration>
+					<imageName>sqx/fast</imageName>
+					<dockerDirectory>${project.basedir}</dockerDirectory>
+					<resources>
+						<resource>
+							<targetPath>/</targetPath>
+							<directory>${project.build.directory}</directory>
+							<include>${project.build.finalName}.jar</include>
+						</resource>
+					</resources>
+				</configuration>
+				<!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 -->
+			</plugin>
+		</plugins>
+	</build>
+
+	<repositories>
+		<repository>
+			<id>public</id>
+			<name>aliyun nexus</name>
+			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
+			<releases>
+				<enabled>true</enabled>
+			</releases>
+		</repository>
+	</repositories>
+	<pluginRepositories>
+		<pluginRepository>
+			<id>public</id>
+			<name>aliyun nexus</name>
+			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
+			<releases>
+				<enabled>true</enabled>
+			</releases>
+			<snapshots>
+				<enabled>false</enabled>
+			</snapshots>
+		</pluginRepository>
+	</pluginRepositories>
+
+</project>

+ 25 - 0
src/main/java/com/sqx/SqxApplication.java

@@ -0,0 +1,25 @@
+package com.sqx;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@Slf4j
+@EnableScheduling
+@SpringBootApplication
+public class SqxApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(SqxApplication.class, args);
+		log.info("(♥◠‿◠)ノ゙  顺风车项目启动成功   ლ(´ڡ`ლ)゙  \n"+
+							"       _    \n" +
+							"      | |   \n" +
+							"  ___ | | __\n" +
+							" / _ \\| |/ /\n" +
+							"| (_) |   < \n" +
+							" \\___/|_|\\_\\");
+
+	}
+
+}

+ 19 - 0
src/main/java/com/sqx/common/annotation/SysLog.java

@@ -0,0 +1,19 @@
+package com.sqx.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 系统日志注解
+ *
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface SysLog {
+
+	String value() default "";
+}

+ 37 - 0
src/main/java/com/sqx/common/aspect/RedisAspect.java

@@ -0,0 +1,37 @@
+package com.sqx.common.aspect;
+
+import com.sqx.common.exception.SqxException;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Redis切面处理类
+ *
+ */
+@Aspect
+@Configuration
+public class RedisAspect {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+    //是否开启redis缓存  true开启   false关闭
+    @Value("${spring.redis.open: false}")
+    private boolean open;
+
+    @Around("execution(* com.sqx.common.utils.RedisUtils.*(..))")
+    public Object around(ProceedingJoinPoint point) throws Throwable {
+        Object result = null;
+        if(open){
+            try{
+                result = point.proceed();
+            }catch (Exception e){
+                logger.error("redis error", e);
+                throw new SqxException("Redis服务异常");
+            }
+        }
+        return result;
+    }
+}

+ 92 - 0
src/main/java/com/sqx/common/aspect/SysLogAspect.java

@@ -0,0 +1,92 @@
+package com.sqx.common.aspect;
+
+import com.google.gson.Gson;
+import com.sqx.common.utils.HttpContextUtils;
+import com.sqx.common.utils.IPUtils;
+import com.sqx.common.annotation.SysLog;
+import com.sqx.modules.sys.entity.SysLogEntity;
+import com.sqx.modules.sys.entity.SysUserEntity;
+import com.sqx.modules.sys.service.SysLogService;
+import org.apache.shiro.SecurityUtils;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+import java.util.Date;
+
+
+/**
+ * 系统日志,切面处理类
+ *
+ */
+@Aspect
+@Component
+public class SysLogAspect {
+	@Autowired
+	private SysLogService sysLogService;
+	
+	@Pointcut("@annotation(com.sqx.common.annotation.SysLog)")
+	public void logPointCut() { 
+		
+	}
+
+	@Around("logPointCut()")
+	public Object around(ProceedingJoinPoint point) throws Throwable {
+		long beginTime = System.currentTimeMillis();
+		//执行方法
+		Object result = point.proceed();
+		//执行时长(毫秒)
+		long time = System.currentTimeMillis() - beginTime;
+
+		//保存日志
+		saveSysLog(point, time);
+
+		return result;
+	}
+
+	private void saveSysLog(ProceedingJoinPoint joinPoint, long time) {
+		MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+		Method method = signature.getMethod();
+
+		SysLogEntity sysLog = new SysLogEntity();
+		SysLog syslog = method.getAnnotation(SysLog.class);
+		if(syslog != null){
+			//注解上的描述
+			sysLog.setOperation(syslog.value());
+		}
+
+		//请求的方法名
+		String className = joinPoint.getTarget().getClass().getName();
+		String methodName = signature.getName();
+		sysLog.setMethod(className + "." + methodName + "()");
+
+		//请求的参数
+		Object[] args = joinPoint.getArgs();
+		try{
+			String params = new Gson().toJson(args);
+			sysLog.setParams(params);
+		}catch (Exception e){
+
+		}
+
+		//获取request
+		HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
+		//设置IP地址
+		sysLog.setIp(IPUtils.getIpAddr(request));
+
+		//用户名
+		String username = ((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUsername();
+		sysLog.setUsername(username);
+
+		sysLog.setTime(time);
+		sysLog.setCreateDate(new Date());
+		//保存系统日志
+		sysLogService.save(sysLog);
+	}
+}

+ 11 - 0
src/main/java/com/sqx/common/entity/WMPoint.java

@@ -0,0 +1,11 @@
+package com.sqx.common.entity;
+
+import lombok.Data;
+
+@Data
+public class WMPoint {
+
+    private static final long serialVersionUID = 1L;
+    double lng;
+    double lat;
+}

+ 52 - 0
src/main/java/com/sqx/common/exception/SqxException.java

@@ -0,0 +1,52 @@
+package com.sqx.common.exception;
+
+/**
+ * 自定义异常
+ *
+ */
+public class SqxException extends RuntimeException {
+	private static final long serialVersionUID = 1L;
+	
+    private String msg;
+    private int code = 500;
+    
+    public SqxException(String msg) {
+		super(msg);
+		this.msg = msg;
+	}
+	
+	public SqxException(String msg, Throwable e) {
+		super(msg, e);
+		this.msg = msg;
+	}
+	
+	public SqxException(String msg, int code) {
+		super(msg);
+		this.msg = msg;
+		this.code = code;
+	}
+	
+	public SqxException(String msg, int code, Throwable e) {
+		super(msg, e);
+		this.msg = msg;
+		this.code = code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	public int getCode() {
+		return code;
+	}
+
+	public void setCode(int code) {
+		this.code = code;
+	}
+	
+	
+}

+ 55 - 0
src/main/java/com/sqx/common/exception/SqxExceptionHandler.java

@@ -0,0 +1,55 @@
+package com.sqx.common.exception;
+
+import com.sqx.common.utils.Result;
+import org.apache.shiro.authz.AuthorizationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.servlet.NoHandlerFoundException;
+
+/**
+ * 异常处理器
+ *
+ */
+@RestControllerAdvice
+public class SqxExceptionHandler {
+	private Logger logger = LoggerFactory.getLogger(getClass());
+
+	/**
+	 * 处理自定义异常
+	 */
+	@ExceptionHandler(SqxException.class)
+	public Result handleException(SqxException e){
+		Result r = new Result();
+		r.put("code", e.getCode());
+		r.put("msg", e.getMessage());
+
+		return r;
+	}
+
+	@ExceptionHandler(NoHandlerFoundException.class)
+	public Result handlerNoFoundException(Exception e) {
+		logger.error(e.getMessage(), e);
+		return Result.error(404, "路径不存在,请检查路径是否正确");
+	}
+
+	@ExceptionHandler(DuplicateKeyException.class)
+	public Result handleDuplicateKeyException(DuplicateKeyException e){
+		logger.error(e.getMessage(), e);
+		return Result.error("数据库中已存在该记录");
+	}
+
+	@ExceptionHandler(AuthorizationException.class)
+	public Result handleAuthorizationException(AuthorizationException e){
+		logger.error(e.getMessage(), e);
+		return Result.error("没有权限,请联系管理员授权");
+	}
+
+	@ExceptionHandler(Exception.class)
+	public Result handleException(Exception e){
+		logger.error(e.getMessage(), e);
+		return Result.error();
+	}
+}

+ 12 - 0
src/main/java/com/sqx/common/utils/ConfigConstant.java

@@ -0,0 +1,12 @@
+package com.sqx.common.utils;
+
+/**
+ * 系统参数相关Key
+ *
+ */
+public class ConfigConstant {
+    /**
+     * 云存储配置KEY
+     */
+    public final static String CLOUD_STORAGE_CONFIG_KEY = "CLOUD_STORAGE_CONFIG_KEY";
+}

+ 110 - 0
src/main/java/com/sqx/common/utils/Constant.java

@@ -0,0 +1,110 @@
+package com.sqx.common.utils;
+
+/**
+ * 常量
+ *
+ */
+public class Constant {
+	/** 超级管理员ID */
+	public static final int SUPER_ADMIN = 1;
+    /**
+     * 当前页码
+     */
+    public static final String PAGE = "page";
+    /**
+     * 每页显示记录数
+     */
+    public static final String LIMIT = "limit";
+    /**
+     * 排序字段
+     */
+    public static final String ORDER_FIELD = "sidx";
+    /**
+     * 排序方式
+     */
+    public static final String ORDER = "order";
+    /**
+     *  升序
+     */
+    public static final String ASC = "asc";
+	/**
+	 * 菜单类型
+	 */
+    public enum MenuType {
+        /**
+         * 目录
+         */
+    	CATALOG(0),
+        /**
+         * 菜单
+         */
+        MENU(1),
+        /**
+         * 按钮
+         */
+        BUTTON(2);
+
+        private int value;
+
+        MenuType(int value) {
+            this.value = value;
+        }
+
+        public int getValue() {
+            return value;
+        }
+    }
+    
+    /**
+     * 定时任务状态
+     */
+    public enum ScheduleStatus {
+        /**
+         * 正常
+         */
+    	NORMAL(0),
+        /**
+         * 暂停
+         */
+    	PAUSE(1);
+
+        private int value;
+
+        ScheduleStatus(int value) {
+            this.value = value;
+        }
+        
+        public int getValue() {
+            return value;
+        }
+    }
+
+    /**
+     * 云服务商
+     */
+    public enum CloudService {
+        /**
+         * 七牛云
+         */
+        QINIU(1),
+        /**
+         * 阿里云
+         */
+        ALIYUN(2),
+        /**
+         * 腾讯云
+         */
+        QCLOUD(3);
+
+        private int value;
+
+        CloudService(int value) {
+            this.value = value;
+        }
+
+        public int getValue() {
+            return value;
+        }
+    }
+
+}

+ 157 - 0
src/main/java/com/sqx/common/utils/DateUtils.java

@@ -0,0 +1,157 @@
+package com.sqx.common.utils;
+
+import org.apache.commons.lang.StringUtils;
+import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 日期处理
+ *
+ */
+public class DateUtils {
+	/** 时间格式(yyyy-MM-dd) */
+	public final static String DATE_PATTERN = "yyyy-MM-dd";
+	/** 时间格式(yyyy-MM-dd HH:mm:ss) */
+	public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
+
+    /**
+     * 日期格式化 日期格式为:yyyy-MM-dd
+     * @param date  日期
+     * @return  返回yyyy-MM-dd格式日期
+     */
+	public static String format(Date date) {
+        return format(date, DATE_TIME_PATTERN);
+    }
+
+    /**
+     * 日期格式化 日期格式为:yyyy-MM-dd
+     * @param date  日期
+     * @param pattern  格式,如:DateUtils.DATE_TIME_PATTERN
+     * @return  返回yyyy-MM-dd格式日期
+     */
+    public static String format(Date date, String pattern) {
+        if(date != null){
+            SimpleDateFormat df = new SimpleDateFormat(pattern);
+            return df.format(date);
+        }
+        return null;
+    }
+
+    /**
+     * 字符串转换成日期
+     * @param strDate 日期字符串
+     * @param pattern 日期的格式,如:DateUtils.DATE_TIME_PATTERN
+     */
+    public static Date stringToDate(String strDate, String pattern) {
+        if (StringUtils.isBlank(strDate)){
+            return null;
+        }
+
+        DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
+        return fmt.parseLocalDateTime(strDate).toDate();
+    }
+
+    /**
+     * 根据周数,获取开始日期、结束日期
+     * @param week  周期  0本周,-1上周,-2上上周,1下周,2下下周
+     * @return  返回date[0]开始日期、date[1]结束日期
+     */
+    public static Date[] getWeekStartAndEnd(int week) {
+        DateTime dateTime = new DateTime();
+        LocalDate date = new LocalDate(dateTime.plusWeeks(week));
+
+        date = date.dayOfWeek().withMinimumValue();
+        Date beginDate = date.toDate();
+        Date endDate = date.plusDays(6).toDate();
+        return new Date[]{beginDate, endDate};
+    }
+
+    /**
+     * 对日期的【秒】进行加/减
+     *
+     * @param date 日期
+     * @param seconds 秒数,负数为减
+     * @return 加/减几秒后的日期
+     */
+    public static Date addDateSeconds(Date date, int seconds) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusSeconds(seconds).toDate();
+    }
+
+    /**
+     * 对日期的【分钟】进行加/减
+     *
+     * @param date 日期
+     * @param minutes 分钟数,负数为减
+     * @return 加/减几分钟后的日期
+     */
+    public static Date addDateMinutes(Date date, int minutes) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusMinutes(minutes).toDate();
+    }
+
+    /**
+     * 对日期的【小时】进行加/减
+     *
+     * @param date 日期
+     * @param hours 小时数,负数为减
+     * @return 加/减几小时后的日期
+     */
+    public static Date addDateHours(Date date, int hours) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusHours(hours).toDate();
+    }
+
+    /**
+     * 对日期的【天】进行加/减
+     *
+     * @param date 日期
+     * @param days 天数,负数为减
+     * @return 加/减几天后的日期
+     */
+    public static Date addDateDays(Date date, int days) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusDays(days).toDate();
+    }
+
+    /**
+     * 对日期的【周】进行加/减
+     *
+     * @param date 日期
+     * @param weeks 周数,负数为减
+     * @return 加/减几周后的日期
+     */
+    public static Date addDateWeeks(Date date, int weeks) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusWeeks(weeks).toDate();
+    }
+
+    /**
+     * 对日期的【月】进行加/减
+     *
+     * @param date 日期
+     * @param months 月数,负数为减
+     * @return 加/减几月后的日期
+     */
+    public static Date addDateMonths(Date date, int months) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusMonths(months).toDate();
+    }
+
+    /**
+     * 对日期的【年】进行加/减
+     *
+     * @param date 日期
+     * @param years 年数,负数为减
+     * @return 加/减几年后的日期
+     */
+    public static Date addDateYears(Date date, int years) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusYears(years).toDate();
+    }
+}

+ 24 - 0
src/main/java/com/sqx/common/utils/HttpContextUtils.java

@@ -0,0 +1,24 @@
+package com.sqx.common.utils;
+
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class HttpContextUtils {
+
+	public static HttpServletRequest getHttpServletRequest() {
+		return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+	}
+
+	public static String getDomain(){
+		HttpServletRequest request = getHttpServletRequest();
+		StringBuffer url = request.getRequestURL();
+		return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString();
+	}
+
+	public static String getOrigin(){
+		HttpServletRequest request = getHttpServletRequest();
+		return request.getHeader("Origin");
+	}
+}

+ 49 - 0
src/main/java/com/sqx/common/utils/IPUtils.java

@@ -0,0 +1,49 @@
+package com.sqx.common.utils;
+
+import com.alibaba.druid.util.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * IP地址
+ *
+ */
+public class IPUtils {
+	private static Logger logger = LoggerFactory.getLogger(IPUtils.class);
+
+	/**
+	 * 获取IP地址
+	 * 
+	 * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
+	 * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
+	 */
+	public static String getIpAddr(HttpServletRequest request) {
+    	String ip = null;
+        try {
+            ip = request.getHeader("x-forwarded-for");
+            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("Proxy-Client-IP");
+            }
+            if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("WL-Proxy-Client-IP");
+            }
+            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("HTTP_CLIENT_IP");
+            }
+            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+            }
+            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getRemoteAddr();
+            }
+        } catch (Exception e) {
+        	logger.error("IPUtils ERROR ", e);
+        }
+
+        
+        return ip;
+    }
+	
+}

+ 17 - 0
src/main/java/com/sqx/common/utils/MapUtils.java

@@ -0,0 +1,17 @@
+package com.sqx.common.utils;
+
+import java.util.HashMap;
+
+
+/**
+ * Map工具类
+ *
+ */
+public class MapUtils extends HashMap<String, Object> {
+
+    @Override
+    public MapUtils put(String key, Object value) {
+        super.put(key, value);
+        return this;
+    }
+}

+ 46 - 0
src/main/java/com/sqx/common/utils/MyMetaObjectHandler.java

@@ -0,0 +1,46 @@
+package com.sqx.common.utils;
+
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import com.sun.prism.impl.BaseContext;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Objects;
+
+@Component
+@Slf4j
+public class MyMetaObjectHandler implements MetaObjectHandler {
+
+    /**
+     * 插入操作时自动填充
+     *
+     * @param metaObject
+     */
+    @Override
+    public void insertFill(MetaObject metaObject) {
+        Object createTime = getFieldValByName("createTime", metaObject);
+        if (Objects.isNull(createTime)) {
+            setInsertFieldValByName("createTime", new Date(), metaObject);
+        }
+        Object updateTime = getFieldValByName("updateTime", metaObject);
+        if (Objects.isNull(updateTime)) {
+            setInsertFieldValByName("updateTime", new Date(), metaObject);
+        }
+    }
+
+    /**
+     * 更新操作时自动填充
+     *
+     * @param metaObject
+     */
+    @Override
+    public void updateFill(MetaObject metaObject) {
+        Object updateTime = getFieldValByName("updateTime", metaObject);
+        if (Objects.isNull(updateTime)) {
+            setInsertFieldValByName("updateTime", new Date(), metaObject);
+        }
+    }
+}

+ 101 - 0
src/main/java/com/sqx/common/utils/PageUtils.java

@@ -0,0 +1,101 @@
+package com.sqx.common.utils;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 分页工具类
+ *
+ */
+public class PageUtils implements Serializable {
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 总记录数
+	 */
+	private int totalCount;
+	/**
+	 * 每页记录数
+	 */
+	private int pageSize;
+	/**
+	 * 总页数
+	 */
+	private int totalPage;
+	/**
+	 * 当前页数
+	 */
+	private int currPage;
+	/**
+	 * 列表数据
+	 */
+	private List<?> list;
+	
+	/**
+	 * 分页
+	 * @param list        列表数据
+	 * @param totalCount  总记录数
+	 * @param pageSize    每页记录数
+	 * @param currPage    当前页数
+	 */
+	public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {
+		this.list = list;
+		this.totalCount = totalCount;
+		this.pageSize = pageSize;
+		this.currPage = currPage;
+		this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
+	}
+
+	/**
+	 * 分页
+	 */
+	public PageUtils(IPage<?> page) {
+		this.list = page.getRecords();
+		this.totalCount = (int)page.getTotal();
+		this.pageSize = (int)page.getSize();
+		this.currPage = (int)page.getCurrent();
+		this.totalPage = (int)page.getPages();
+	}
+
+	public int getTotalCount() {
+		return totalCount;
+	}
+
+	public void setTotalCount(int totalCount) {
+		this.totalCount = totalCount;
+	}
+
+	public int getPageSize() {
+		return pageSize;
+	}
+
+	public void setPageSize(int pageSize) {
+		this.pageSize = pageSize;
+	}
+
+	public int getTotalPage() {
+		return totalPage;
+	}
+
+	public void setTotalPage(int totalPage) {
+		this.totalPage = totalPage;
+	}
+
+	public int getCurrPage() {
+		return currPage;
+	}
+
+	public void setCurrPage(int currPage) {
+		this.currPage = currPage;
+	}
+
+	public List<?> getList() {
+		return list;
+	}
+
+	public void setList(List<?> list) {
+		this.list = list;
+	}
+	
+}

+ 175 - 0
src/main/java/com/sqx/common/utils/QRCodeUtil.java

@@ -0,0 +1,175 @@
+package com.sqx.common.utils;
+
+import cn.hutool.extra.qrcode.BufferedImageLuminanceSource;
+import com.google.zxing.*;
+import com.google.zxing.Result;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.common.HybridBinarizer;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.geom.RoundRectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.util.Hashtable;
+
+/**
+ * 二维码生成解析工具类
+
+ * @date 2020/02/12 09:37
+ */
+public class QRCodeUtil {
+
+    //编码格式,采用utf-8
+    private static final String UNICODE = "utf-8";
+    //图片格式
+    private static final String FORMAT = "JPG";
+    //二维码宽度,单位:像素pixels
+    private static final int QRCODE_WIDTH = 300;
+    //二维码高度,单位:像素pixels
+    private static final int QRCODE_HEIGHT = 300;
+    //LOGO宽度,单位:像素pixels
+    private static final int LOGO_WIDTH = 100;
+    //LOGO高度,单位:像素pixels
+    private static final int LOGO_HEIGHT = 100;
+
+    /**
+     * 生成二维码图片
+     * @param content 二维码内容
+     * @param logoPath 图片地址
+     * @param needCompress 是否压缩
+     * @return
+     * @throws Exception
+     */
+    private static BufferedImage createImage(String content, String logoPath, boolean needCompress) throws Exception {
+        Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
+        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
+        hints.put(EncodeHintType.CHARACTER_SET, UNICODE);
+        hints.put(EncodeHintType.MARGIN, 1);
+        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_WIDTH, QRCODE_HEIGHT,
+                hints);
+        int width = bitMatrix.getWidth();
+        int height = bitMatrix.getHeight();
+        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        for (int x = 0; x < width; x++) {
+            for (int y = 0; y < height; y++) {
+                image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
+            }
+        }
+        if (logoPath == null || "".equals(logoPath)) {
+            return image;
+        }
+        // 插入图片
+        QRCodeUtil.insertImage(image, logoPath, needCompress);
+        return image;
+    }
+
+    /**
+     * 插入LOGO
+     * @param source 二维码图片
+     * @param logoPath LOGO图片地址
+     * @param needCompress 是否压缩
+     * @throws Exception
+     */
+    private static void insertImage(BufferedImage source, String logoPath, boolean needCompress) throws Exception {
+        File file = new File(logoPath);
+        if (!file.exists()) {
+            throw new Exception("logo file not found.");
+        }
+        Image src = ImageIO.read(new File(logoPath));
+        int width = src.getWidth(null);
+        int height = src.getHeight(null);
+        if (needCompress) { // 压缩LOGO
+            if (width > LOGO_WIDTH) {
+                width = LOGO_WIDTH;
+            }
+            if (height > LOGO_HEIGHT) {
+                height = LOGO_HEIGHT;
+            }
+            Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH);
+            BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+            Graphics g = tag.getGraphics();
+            g.drawImage(image, 0, 0, null); // 绘制缩小后的图
+            g.dispose();
+            src = image;
+        }
+        // 插入LOGO
+        Graphics2D graph = source.createGraphics();
+        int x = (QRCODE_WIDTH - width) / 2;
+        int y = (QRCODE_HEIGHT - height) / 2;
+        graph.drawImage(src, x, y, width, height, null);
+        Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);
+        graph.setStroke(new BasicStroke(3f));
+        graph.draw(shape);
+        graph.dispose();
+    }
+
+    /**
+     * 生成二维码(内嵌LOGO)
+     * 调用者指定二维码文件名
+     * @param content 二维码的内容
+     * @param logoPath 中间图片地址
+     * @param destPath 存储路径
+     * @param fileName 文件名称
+     * @param needCompress 是否压缩
+     * @return
+     * @throws Exception
+     */
+    public static String encode(String content, String logoPath, String destPath, String fileName, boolean needCompress) throws Exception {
+        BufferedImage image = QRCodeUtil.createImage(content, logoPath, needCompress);
+        mkdirs(destPath);
+        //文件名称通过传递
+        fileName = fileName.substring(0, fileName.indexOf(".")>0?fileName.indexOf("."):fileName.length())
+                + "." + FORMAT.toLowerCase();
+        ImageIO.write(image, FORMAT, new File(destPath + "/" + fileName));
+        return fileName;
+    }
+
+    /**
+     * 创建文件夹, mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常)
+     * @param destPath
+     */
+    public static void mkdirs(String destPath) {
+        File file = new File(destPath);
+        if (!file.exists() && !file.isDirectory()) {
+            file.mkdirs();
+        }
+    }
+
+    /**
+     * 解析二维码
+     * @param path 二维码图片路径
+     * @return String 二维码内容
+     * @throws Exception
+     */
+    public static String decode(String path) throws Exception {
+        File file = new File(path);
+        BufferedImage image = ImageIO.read(file);
+        if (image == null) {
+            return null;
+        }
+        BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);
+        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
+        Result result;
+        Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
+        hints.put(DecodeHintType.CHARACTER_SET, UNICODE);
+        result = new MultiFormatReader().decode(bitmap, hints);
+        return result.getText();
+    }
+
+    /**
+     * 测试
+     * @param args
+     * @throws Exception
+     */
+    public static void main(String[] args) throws Exception {
+        String text = "http://47.105.101.72:8088";
+        //不含Logo
+//        QRCodeUtil.encode(text, null, "/Users/kyson/Downloads", "qrcode", true);
+        //含Logo,指定二维码图片名
+        QRCodeUtil.encode(text, "/Users/kyson/Downloads/宋康.jpg", "/Users/kyson/Downloads", "qrcode1", true);
+//        System.out.println(QRCodeUtil.decode("d:\\cc\\qrcode1.jpg"));
+//        System.out.println(QRCodeUtil.encode(text, null, "/Users/kyson/Downloads", "qrcode", true));
+    }
+}

+ 68 - 0
src/main/java/com/sqx/common/utils/Query.java

@@ -0,0 +1,68 @@
+package com.sqx.common.utils;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sqx.common.xss.SQLFilter;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.Map;
+
+/**
+ * 查询参数
+ *
+ */
+public class Query<T> {
+
+    public IPage<T> getPage(Map<String, Object> params) {
+        return this.getPage(params, null, false);
+    }
+
+    public IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {
+        //分页参数
+        long curPage = 1;
+        long limit = 10;
+
+        if(params.get(Constant.PAGE) != null){
+            curPage = Long.parseLong(String.valueOf(params.get(Constant.PAGE)));
+        }
+        if(params.get(Constant.LIMIT) != null){
+            limit = Long.parseLong(String.valueOf(params.get(Constant.LIMIT)));
+        }
+
+        //分页对象
+        Page<T> page = new Page<>(curPage, limit);
+
+        //分页参数
+        params.put(Constant.PAGE, page);
+
+        //排序字段
+        //防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险)
+        String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD));
+        String order = (String)params.get(Constant.ORDER);
+
+
+        //前端字段排序
+        if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){
+            if(Constant.ASC.equalsIgnoreCase(order)) {
+                return  page.addOrder(OrderItem.asc(orderField));
+            }else {
+                return page.addOrder(OrderItem.desc(orderField));
+            }
+        }
+
+        //没有排序字段,则不排序
+        if(StringUtils.isBlank(defaultOrderField)){
+            return page;
+        }
+
+        //默认排序
+        if(isAsc) {
+            page.addOrder(OrderItem.asc(defaultOrderField));
+        }else {
+            page.addOrder(OrderItem.desc(defaultOrderField));
+        }
+
+        return page;
+    }
+}

+ 12 - 0
src/main/java/com/sqx/common/utils/RedisKeys.java

@@ -0,0 +1,12 @@
+package com.sqx.common.utils;
+
+/**
+ * Redis所有Keys
+ *
+ */
+public class RedisKeys {
+
+    public static String getSysConfigKey(String key){
+        return "sys:config:" + key;
+    }
+}

+ 90 - 0
src/main/java/com/sqx/common/utils/RedisUtils.java

@@ -0,0 +1,90 @@
+package com.sqx.common.utils;
+
+import com.google.gson.Gson;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.*;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Redis工具类
+ *
+ */
+@Component
+public class RedisUtils {
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+    @Autowired
+    private ValueOperations<String, String> valueOperations;
+    @Autowired
+    private HashOperations<String, String, Object> hashOperations;
+    @Autowired
+    private ListOperations<String, Object> listOperations;
+    @Autowired
+    private SetOperations<String, Object> setOperations;
+    @Autowired
+    private ZSetOperations<String, Object> zSetOperations;
+    /**  默认过期时长,单位:秒 */
+    public final static long DEFAULT_EXPIRE = 60 * 60 * 24;
+    /**  不设置过期时长 */
+    public final static long NOT_EXPIRE = -1;
+    private final static Gson Gson = new Gson();
+
+    public void set(String key, Object value, long expire){
+        valueOperations.set(key, toJson(value));
+        if(expire != NOT_EXPIRE){
+            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
+        }
+    }
+
+    public void set(String key, Object value){
+        set(key, value, DEFAULT_EXPIRE);
+    }
+
+    public <T> T get(String key, Class<T> clazz, long expire) {
+        String value = valueOperations.get(key);
+        if(expire != NOT_EXPIRE){
+            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
+        }
+        return value == null ? null : fromJson(value, clazz);
+    }
+
+    public <T> T get(String key, Class<T> clazz) {
+        return get(key, clazz, NOT_EXPIRE);
+    }
+
+    public String get(String key, long expire) {
+        String value = valueOperations.get(key);
+        if(expire != NOT_EXPIRE){
+            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
+        }
+        return value;
+    }
+
+    public String get(String key) {
+        return get(key, NOT_EXPIRE);
+    }
+
+    public void delete(String key) {
+        redisTemplate.delete(key);
+    }
+
+    /**
+     * Object转成JSON数据
+     */
+    private String toJson(Object object){
+        if(object instanceof Integer || object instanceof Long || object instanceof Float ||
+                object instanceof Double || object instanceof Boolean || object instanceof String){
+            return String.valueOf(object);
+        }
+        return Gson.toJson(object);
+    }
+
+    /**
+     * JSON数据,转成Object
+     */
+    private <T> T fromJson(String json, Class<T> clazz){
+        return Gson.fromJson(json, clazz);
+    }
+}

+ 58 - 0
src/main/java/com/sqx/common/utils/Result.java

@@ -0,0 +1,58 @@
+package com.sqx.common.utils;
+
+import org.apache.http.HttpStatus;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 返回数据
+ *
+ */
+public class Result extends HashMap<String, Object> {
+	private static final long serialVersionUID = 1L;
+	
+	public Result () {
+		put("code", 0);
+		put("msg", "success");
+	}
+	
+	public static Result error() {
+		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
+	}
+	
+	public static Result error(String msg) {
+		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
+	}
+	
+	public static Result error(int code, String msg) {
+		Result r = new Result();
+		r.put("code", code);
+		r.put("msg", msg);
+		return r;
+	}
+
+	public static Result success(String msg) {
+		Result r = new Result();
+		r.put("msg", msg);
+		return r;
+	}
+	public static Result upStatus(Integer rows) {
+		return rows > 0 ? success() : error();
+	}
+	public static Result success(Map<String, Object> map) {
+		Result r = new Result();
+		r.putAll(map);
+		return r;
+	}
+	
+	public static Result success() {
+		return new Result();
+	}
+
+	@Override
+    public Result  put(String key, Object value) {
+		super.put(key, value);
+		return this;
+	}
+}

+ 52 - 0
src/main/java/com/sqx/common/utils/ShiroUtils.java

@@ -0,0 +1,52 @@
+package com.sqx.common.utils;
+
+import com.sqx.common.exception.SqxException;
+import com.sqx.modules.sys.entity.SysUserEntity;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.session.Session;
+import org.apache.shiro.subject.Subject;
+
+/**
+ * Shiro工具类
+ *
+ */
+public class ShiroUtils {
+
+	public static Session getSession() {
+		return SecurityUtils.getSubject().getSession();
+	}
+
+	public static Subject getSubject() {
+		return SecurityUtils.getSubject();
+	}
+
+	public static SysUserEntity getUserEntity() {
+		return (SysUserEntity)SecurityUtils.getSubject().getPrincipal();
+	}
+
+	public static Long getUserId() {
+		return getUserEntity().getUserId();
+	}
+	
+	public static void setSessionAttribute(Object key, Object value) {
+		getSession().setAttribute(key, value);
+	}
+
+	public static Object getSessionAttribute(Object key) {
+		return getSession().getAttribute(key);
+	}
+
+	public static boolean isLogin() {
+		return SecurityUtils.getSubject().getPrincipal() != null;
+	}
+
+	public static String getKaptcha(String key) {
+		Object kaptcha = getSessionAttribute(key);
+		if(kaptcha == null){
+			throw new SqxException("验证码已失效");
+		}
+		getSession().removeAttribute(key);
+		return kaptcha.toString();
+	}
+
+}

+ 42 - 0
src/main/java/com/sqx/common/utils/SpringContextUtils.java

@@ -0,0 +1,42 @@
+package com.sqx.common.utils;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+/**
+ * Spring Context 工具类
+ *
+ */
+@Component
+public class SpringContextUtils implements ApplicationContextAware {
+	public static ApplicationContext applicationContext; 
+
+	@Override
+	public void setApplicationContext(ApplicationContext applicationContext)
+			throws BeansException {
+		SpringContextUtils.applicationContext = applicationContext;
+	}
+
+	public static Object getBean(String name) {
+		return applicationContext.getBean(name);
+	}
+
+	public static <T> T getBean(String name, Class<T> requiredType) {
+		return applicationContext.getBean(name, requiredType);
+	}
+
+	public static boolean containsBean(String name) {
+		return applicationContext.containsBean(name);
+	}
+
+	public static boolean isSingleton(String name) {
+		return applicationContext.isSingleton(name);
+	}
+
+	public static Class<? extends Object> getType(String name) {
+		return applicationContext.getType(name);
+	}
+
+}

+ 23 - 0
src/main/java/com/sqx/common/validator/Assert.java

@@ -0,0 +1,23 @@
+package com.sqx.common.validator;
+
+import com.sqx.common.exception.SqxException;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * 数据校验
+ *
+ */
+ public class Assert {
+
+    public static void isBlank(String str, String message) {
+        if (StringUtils.isBlank(str)) {
+            throw new SqxException(message);
+        }
+    }
+
+    public static void isNull(Object object, String message) {
+        if (object == null) {
+            throw new SqxException(message);
+        }
+    }
+}

+ 40 - 0
src/main/java/com/sqx/common/validator/ValidatorUtils.java

@@ -0,0 +1,40 @@
+package com.sqx.common.validator;
+
+import com.sqx.common.exception.SqxException;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import java.util.Set;
+
+/**
+ * hibernate-validator校验工具类
+ *
+ * 参考文档:http://docs.jboss.org/hibernate/validator/5.4/reference/en-US/html_single/
+ *
+ */
+public class ValidatorUtils {
+    private static Validator validator;
+
+    static {
+        validator = Validation.buildDefaultValidatorFactory().getValidator();
+    }
+
+    /**
+     * 校验对象
+     * @param object        待校验对象
+     * @param groups        待校验的组
+     * @throws SqxException  校验不通过,则报SqxException异常
+     */
+    public static void validateEntity(Object object, Class<?>... groups)
+            throws SqxException {
+        Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);
+        if (!constraintViolations.isEmpty()) {
+            StringBuilder msg = new StringBuilder();
+            for(ConstraintViolation<Object> constraint:  constraintViolations){
+                msg.append(constraint.getMessage()).append("<br>");
+            }
+            throw new SqxException(msg.toString());
+        }
+    }
+}

+ 8 - 0
src/main/java/com/sqx/common/validator/group/AddGroup.java

@@ -0,0 +1,8 @@
+package com.sqx.common.validator.group;
+
+/**
+ * 新增数据 Group
+ *
+ */
+public interface AddGroup {
+}

+ 8 - 0
src/main/java/com/sqx/common/validator/group/AliyunGroup.java

@@ -0,0 +1,8 @@
+package com.sqx.common.validator.group;
+
+/**
+ * 阿里云
+ *
+ */
+public interface AliyunGroup {
+}

+ 12 - 0
src/main/java/com/sqx/common/validator/group/Group.java

@@ -0,0 +1,12 @@
+package com.sqx.common.validator.group;
+
+import javax.validation.GroupSequence;
+
+/**
+ * 定义校验顺序,如果AddGroup组失败,则UpdateGroup组不会再校验
+ *
+ */
+@GroupSequence({AddGroup.class, UpdateGroup.class})
+public interface Group {
+
+}

+ 8 - 0
src/main/java/com/sqx/common/validator/group/QcloudGroup.java

@@ -0,0 +1,8 @@
+package com.sqx.common.validator.group;
+
+/**
+ * 腾讯云
+ *
+ */
+public interface QcloudGroup {
+}

+ 8 - 0
src/main/java/com/sqx/common/validator/group/QiniuGroup.java

@@ -0,0 +1,8 @@
+package com.sqx.common.validator.group;
+
+/**
+ * 七牛
+ *
+ */
+public interface QiniuGroup {
+}

+ 10 - 0
src/main/java/com/sqx/common/validator/group/UpdateGroup.java

@@ -0,0 +1,10 @@
+package com.sqx.common.validator.group;
+
+/**
+ * 更新数据 Group
+ *
+ */
+
+public interface UpdateGroup {
+
+}

+ 526 - 0
src/main/java/com/sqx/common/xss/HTMLFilter.java

@@ -0,0 +1,526 @@
+package com.sqx.common.xss;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ *
+ * HTML filtering utility for protecting against XSS (Cross Site Scripting).
+ *
+ * This code is licensed LGPLv3
+ *
+ * This code is a Java port of the original work in PHP by Cal Hendersen.
+ * http://code.iamcal.com/php/lib_filter/
+ *
+ * The trickiest part of the translation was handling the differences in regex handling
+ * between PHP and Java.  These resources were helpful in the process:
+ *
+ * http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
+ * http://us2.php.net/manual/en/reference.pcre.pattern.modifiers.php
+ * http://www.regular-expressions.info/modifiers.html
+ *
+ * A note on naming conventions: instance variables are prefixed with a "v"; global
+ * constants are in all caps.
+ *
+ * Sample use:
+ * String input = ...
+ * String clean = new HTMLFilter().filter( input );
+ *
+ * The class is not thread safe. Create a new instance if in doubt.
+ *
+ * If you find bugs or have suggestions on improvement (especially regarding
+ * performance), please contact us.  The latest version of this
+ * source, and our contact details, can be found at http://xss-html-filter.sf.net
+ *
+ * @author Joseph O'Connell
+ * @author Cal Hendersen
+ * @author Michael Semb Wever
+ */
+public final class HTMLFilter {
+
+    /** regex flag union representing /si modifiers in php **/
+    private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL;
+    private static final Pattern P_COMMENTS = Pattern.compile("<!--(.*?)-->", Pattern.DOTALL);
+    private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI);
+    private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL);
+    private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI);
+    private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI);
+    private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI);
+    private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI);
+    private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI);
+    private static final Pattern P_ENTITY = Pattern.compile("&#(\\d+);?");
+    private static final Pattern P_ENTITY_UNICODE = Pattern.compile("&#x([0-9a-f]+);?");
+    private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?");
+    private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))");
+    private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", Pattern.DOTALL);
+    private static final Pattern P_END_ARROW = Pattern.compile("^>");
+    private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)");
+    private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)");
+    private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)");
+    private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)");
+    private static final Pattern P_AMP = Pattern.compile("&");
+    private static final Pattern P_QUOTE = Pattern.compile("<");
+    private static final Pattern P_LEFT_ARROW = Pattern.compile("<");
+    private static final Pattern P_RIGHT_ARROW = Pattern.compile(">");
+    private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>");
+
+    // @xxx could grow large... maybe use sesat's ReferenceMap
+    private static final ConcurrentMap<String,Pattern> P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap<String, Pattern>();
+    private static final ConcurrentMap<String,Pattern> P_REMOVE_SELF_BLANKS = new ConcurrentHashMap<String, Pattern>();
+
+    /** set of allowed html elements, along with allowed attributes for each element **/
+    private final Map<String, List<String>> vAllowed;
+    /** counts of open tags for each (allowable) html element **/
+    private final Map<String, Integer> vTagCounts = new HashMap<String, Integer>();
+
+    /** html elements which must always be self-closing (e.g. "<img />") **/
+    private final String[] vSelfClosingTags;
+    /** html elements which must always have separate opening and closing tags (e.g. "<b></b>") **/
+    private final String[] vNeedClosingTags;
+    /** set of disallowed html elements **/
+    private final String[] vDisallowed;
+    /** attributes which should be checked for valid protocols **/
+    private final String[] vProtocolAtts;
+    /** allowed protocols **/
+    private final String[] vAllowedProtocols;
+    /** tags which should be removed if they contain no content (e.g. "<b></b>" or "<b />") **/
+    private final String[] vRemoveBlanks;
+    /** entities allowed within html markup **/
+    private final String[] vAllowedEntities;
+    /** flag determining whether comments are allowed in input String. */
+    private final boolean stripComment;
+    private final boolean encodeQuotes;
+    private boolean vDebug = false;
+    /**
+     * flag determining whether to try to make tags when presented with "unbalanced"
+     * angle brackets (e.g. "<b text </b>" becomes "<b> text </b>").  If set to false,
+     * unbalanced angle brackets will be html escaped.
+     */
+    private final boolean alwaysMakeTags;
+
+    /** Default constructor.
+     *
+     */
+    public HTMLFilter() {
+        vAllowed = new HashMap<>();
+
+        final ArrayList<String> a_atts = new ArrayList<String>();
+        a_atts.add("href");
+        a_atts.add("target");
+        vAllowed.put("a", a_atts);
+
+        final ArrayList<String> img_atts = new ArrayList<String>();
+        img_atts.add("src");
+        img_atts.add("width");
+        img_atts.add("height");
+        img_atts.add("alt");
+        vAllowed.put("img", img_atts);
+
+        final ArrayList<String> no_atts = new ArrayList<String>();
+        vAllowed.put("b", no_atts);
+        vAllowed.put("strong", no_atts);
+        vAllowed.put("i", no_atts);
+        vAllowed.put("em", no_atts);
+
+        vSelfClosingTags = new String[]{"img"};
+        vNeedClosingTags = new String[]{"a", "b", "strong", "i", "em"};
+        vDisallowed = new String[]{};
+        vAllowedProtocols = new String[]{"http", "mailto", "https"}; // no ftp.
+        vProtocolAtts = new String[]{"src", "href"};
+        vRemoveBlanks = new String[]{"a", "b", "strong", "i", "em"};
+        vAllowedEntities = new String[]{"amp", "gt", "lt", "quot"};
+        stripComment = true;
+        encodeQuotes = true;
+        alwaysMakeTags = true;
+    }
+
+    /** Set debug flag to true. Otherwise use default settings. See the default constructor.
+     *
+     * @param debug turn debug on with a true argument
+     */
+    public HTMLFilter(final boolean debug) {
+        this();
+        vDebug = debug;
+
+    }
+
+    /** Map-parameter configurable constructor.
+     *
+     * @param conf map containing configuration. keys match field names.
+     */
+    public HTMLFilter(final Map<String,Object> conf) {
+
+        assert conf.containsKey("vAllowed") : "configuration requires vAllowed";
+        assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags";
+        assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags";
+        assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed";
+        assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols";
+        assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts";
+        assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks";
+        assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities";
+
+        vAllowed = Collections.unmodifiableMap((HashMap<String, List<String>>) conf.get("vAllowed"));
+        vSelfClosingTags = (String[]) conf.get("vSelfClosingTags");
+        vNeedClosingTags = (String[]) conf.get("vNeedClosingTags");
+        vDisallowed = (String[]) conf.get("vDisallowed");
+        vAllowedProtocols = (String[]) conf.get("vAllowedProtocols");
+        vProtocolAtts = (String[]) conf.get("vProtocolAtts");
+        vRemoveBlanks = (String[]) conf.get("vRemoveBlanks");
+        vAllowedEntities = (String[]) conf.get("vAllowedEntities");
+        stripComment =  conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true;
+        encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true;
+        alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true;
+    }
+
+    private void reset() {
+        vTagCounts.clear();
+    }
+
+    private void debug(final String msg) {
+        if (vDebug) {
+            Logger.getAnonymousLogger().info(msg);
+        }
+    }
+
+    //---------------------------------------------------------------
+    // my versions of some PHP library functions
+    public static String chr(final int decimal) {
+        return String.valueOf((char) decimal);
+    }
+
+    public static String htmlSpecialChars(final String s) {
+        String result = s;
+        result = regexReplace(P_AMP, "&amp;", result);
+        result = regexReplace(P_QUOTE, "&quot;", result);
+        result = regexReplace(P_LEFT_ARROW, "&lt;", result);
+        result = regexReplace(P_RIGHT_ARROW, "&gt;", result);
+        return result;
+    }
+
+    //---------------------------------------------------------------
+    /**
+     * given a user submitted input String, filter out any invalid or restricted
+     * html.
+     *
+     * @param input text (i.e. submitted by a user) than may contain html
+     * @return "clean" version of input, with only valid, whitelisted html elements allowed
+     */
+    public String filter(final String input) {
+        reset();
+        String s = input;
+
+        debug("************************************************");
+        debug("              INPUT: " + input);
+
+        s = escapeComments(s);
+        debug("     escapeComments: " + s);
+
+        s = balanceHTML(s);
+        debug("        balanceHTML: " + s);
+
+        s = checkTags(s);
+        debug("          checkTags: " + s);
+
+        s = processRemoveBlanks(s);
+        debug("processRemoveBlanks: " + s);
+
+        s = validateEntities(s);
+        debug("    validateEntites: " + s);
+
+        debug("************************************************\n\n");
+        return s;
+    }
+
+    public boolean isAlwaysMakeTags(){
+        return alwaysMakeTags;
+    }
+
+    public boolean isStripComments(){
+        return stripComment;
+    }
+
+    private String escapeComments(final String s) {
+        final Matcher m = P_COMMENTS.matcher(s);
+        final StringBuffer buf = new StringBuffer();
+        if (m.find()) {
+            final String match = m.group(1); //(.*?)
+            m.appendReplacement(buf, Matcher.quoteReplacement("<!--" + htmlSpecialChars(match) + "-->"));
+        }
+        m.appendTail(buf);
+
+        return buf.toString();
+    }
+
+    private String balanceHTML(String s) {
+        if (alwaysMakeTags) {
+            //
+            // try and form html
+            //
+            s = regexReplace(P_END_ARROW, "", s);
+            s = regexReplace(P_BODY_TO_END, "<$1>", s);
+            s = regexReplace(P_XML_CONTENT, "$1<$2", s);
+
+        } else {
+            //
+            // escape stray brackets
+            //
+            s = regexReplace(P_STRAY_LEFT_ARROW, "&lt;$1", s);
+            s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2&gt;<", s);
+
+            //
+            // the last regexp causes '<>' entities to appear
+            // (we need to do a lookahead assertion so that the last bracket can
+            // be used in the next pass of the regexp)
+            //
+            s = regexReplace(P_BOTH_ARROWS, "", s);
+        }
+
+        return s;
+    }
+
+    private String checkTags(String s) {
+        Matcher m = P_TAGS.matcher(s);
+
+        final StringBuffer buf = new StringBuffer();
+        while (m.find()) {
+            String replaceStr = m.group(1);
+            replaceStr = processTag(replaceStr);
+            m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr));
+        }
+        m.appendTail(buf);
+
+        s = buf.toString();
+
+        // these get tallied in processTag
+        // (remember to reset before subsequent calls to filter method)
+        for (String key : vTagCounts.keySet()) {
+            for (int ii = 0; ii < vTagCounts.get(key); ii++) {
+                s += "</" + key + ">";
+            }
+        }
+
+        return s;
+    }
+
+    private String processRemoveBlanks(final String s) {
+        String result = s;
+        for (String tag : vRemoveBlanks) {
+            if(!P_REMOVE_PAIR_BLANKS.containsKey(tag)){
+                P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?></" + tag + ">"));
+            }
+            result = regexReplace(P_REMOVE_PAIR_BLANKS.get(tag), "", result);
+            if(!P_REMOVE_SELF_BLANKS.containsKey(tag)){
+                P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>"));
+            }
+            result = regexReplace(P_REMOVE_SELF_BLANKS.get(tag), "", result);
+        }
+
+        return result;
+    }
+
+    private static String regexReplace(final Pattern regex_pattern, final String replacement, final String s) {
+        Matcher m = regex_pattern.matcher(s);
+        return m.replaceAll(replacement);
+    }
+
+    private String processTag(final String s) {
+        // ending tags
+        Matcher m = P_END_TAG.matcher(s);
+        if (m.find()) {
+            final String name = m.group(1).toLowerCase();
+            if (allowed(name)) {
+                if (!inArray(name, vSelfClosingTags)) {
+                    if (vTagCounts.containsKey(name)) {
+                        vTagCounts.put(name, vTagCounts.get(name) - 1);
+                        return "</" + name + ">";
+                    }
+                }
+            }
+        }
+
+        // starting tags
+        m = P_START_TAG.matcher(s);
+        if (m.find()) {
+            final String name = m.group(1).toLowerCase();
+            final String body = m.group(2);
+            String ending = m.group(3);
+
+            //debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" );
+            if (allowed(name)) {
+                String params = "";
+
+                final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body);
+                final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body);
+                final List<String> paramNames = new ArrayList<String>();
+                final List<String> paramValues = new ArrayList<String>();
+                while (m2.find()) {
+                    paramNames.add(m2.group(1)); //([a-z0-9]+)
+                    paramValues.add(m2.group(3)); //(.*?)
+                }
+                while (m3.find()) {
+                    paramNames.add(m3.group(1)); //([a-z0-9]+)
+                    paramValues.add(m3.group(3)); //([^\"\\s']+)
+                }
+
+                String paramName, paramValue;
+                for (int ii = 0; ii < paramNames.size(); ii++) {
+                    paramName = paramNames.get(ii).toLowerCase();
+                    paramValue = paramValues.get(ii);
+
+                    if (allowedAttribute(name, paramName)) {
+                        if (inArray(paramName, vProtocolAtts)) {
+                            paramValue = processParamProtocol(paramValue);
+                        }
+                        params += " " + paramName + "=\"" + paramValue + "\"";
+                    }
+                }
+
+                if (inArray(name, vSelfClosingTags)) {
+                    ending = " /";
+                }
+
+                if (inArray(name, vNeedClosingTags)) {
+                    ending = "";
+                }
+
+                if (ending == null || ending.length() < 1) {
+                    if (vTagCounts.containsKey(name)) {
+                        vTagCounts.put(name, vTagCounts.get(name) + 1);
+                    } else {
+                        vTagCounts.put(name, 1);
+                    }
+                } else {
+                    ending = " /";
+                }
+                return "<" + name + params + ending + ">";
+            } else {
+                return "";
+            }
+        }
+
+        // comments
+        m = P_COMMENT.matcher(s);
+        if (!stripComment && m.find()) {
+            return  "<" + m.group() + ">";
+        }
+
+        return "";
+    }
+
+    private String processParamProtocol(String s) {
+        s = decodeEntities(s);
+        final Matcher m = P_PROTOCOL.matcher(s);
+        if (m.find()) {
+            final String protocol = m.group(1);
+            if (!inArray(protocol, vAllowedProtocols)) {
+                // bad protocol, turn into local anchor link instead
+                s = "#" + s.substring(protocol.length() + 1, s.length());
+                if (s.startsWith("#//")) {
+                    s = "#" + s.substring(3, s.length());
+                }
+            }
+        }
+
+        return s;
+    }
+
+    private String decodeEntities(String s) {
+        StringBuffer buf = new StringBuffer();
+
+        Matcher m = P_ENTITY.matcher(s);
+        while (m.find()) {
+            final String match = m.group(1);
+            final int decimal = Integer.decode(match).intValue();
+            m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
+        }
+        m.appendTail(buf);
+        s = buf.toString();
+
+        buf = new StringBuffer();
+        m = P_ENTITY_UNICODE.matcher(s);
+        while (m.find()) {
+            final String match = m.group(1);
+            final int decimal = Integer.valueOf(match, 16).intValue();
+            m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
+        }
+        m.appendTail(buf);
+        s = buf.toString();
+
+        buf = new StringBuffer();
+        m = P_ENCODE.matcher(s);
+        while (m.find()) {
+            final String match = m.group(1);
+            final int decimal = Integer.valueOf(match, 16).intValue();
+            m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
+        }
+        m.appendTail(buf);
+        s = buf.toString();
+
+        s = validateEntities(s);
+        return s;
+    }
+
+    private String validateEntities(final String s) {
+        StringBuffer buf = new StringBuffer();
+
+        // validate entities throughout the string
+        Matcher m = P_VALID_ENTITIES.matcher(s);
+        while (m.find()) {
+            final String one = m.group(1); //([^&;]*)
+            final String two = m.group(2); //(?=(;|&|$))
+            m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two)));
+        }
+        m.appendTail(buf);
+
+        return encodeQuotes(buf.toString());
+    }
+
+    private String encodeQuotes(final String s){
+        if(encodeQuotes){
+            StringBuffer buf = new StringBuffer();
+            Matcher m = P_VALID_QUOTES.matcher(s);
+            while (m.find()) {
+                final String one = m.group(1); //(>|^)
+                final String two = m.group(2); //([^<]+?)
+                final String three = m.group(3); //(<|$)
+                m.appendReplacement(buf, Matcher.quoteReplacement(one + regexReplace(P_QUOTE, "&quot;", two) + three));
+            }
+            m.appendTail(buf);
+            return buf.toString();
+        }else{
+            return s;
+        }
+    }
+
+    private String checkEntity(final String preamble, final String term) {
+
+        return ";".equals(term) && isValidEntity(preamble)
+                ? '&' + preamble
+                : "&amp;" + preamble;
+    }
+
+    private boolean isValidEntity(final String entity) {
+        return inArray(entity, vAllowedEntities);
+    }
+
+    private static boolean inArray(final String s, final String[] array) {
+        for (String item : array) {
+            if (item != null && item.equals(s)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean allowed(final String name) {
+        return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed);
+    }
+
+    private boolean allowedAttribute(final String name, final String paramName) {
+        return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName));
+    }
+}

+ 41 - 0
src/main/java/com/sqx/common/xss/SQLFilter.java

@@ -0,0 +1,41 @@
+package com.sqx.common.xss;
+
+import com.sqx.common.exception.SqxException;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * SQL过滤
+ *
+ */
+public class SQLFilter {
+
+    /**
+     * SQL注入过滤
+     * @param str  待验证的字符串
+     */
+    public static String sqlInject(String str){
+        if(StringUtils.isBlank(str)){
+            return null;
+        }
+        //去掉'|"|;|\字符
+        str = StringUtils.replace(str, "'", "");
+        str = StringUtils.replace(str, "\"", "");
+        str = StringUtils.replace(str, ";", "");
+        str = StringUtils.replace(str, "\\", "");
+
+        //转换成小写
+        str = str.toLowerCase();
+
+        //非法字符
+        String[] keywords = {"master", "truncate", "insert", "select", "delete", "update", "declare", "alter", "drop"};
+
+        //判断是否包含非法字符
+        for(String keyword : keywords){
+            if(str.indexOf(keyword) != -1){
+                throw new SqxException("包含非法字符");
+            }
+        }
+
+        return str;
+    }
+}

+ 51 - 0
src/main/java/com/sqx/common/xss/XssFilter.java

@@ -0,0 +1,51 @@
+package com.sqx.common.xss;
+
+import org.apache.http.HttpStatus;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * XSS过滤
+ *
+ */
+public class XssFilter implements Filter {
+
+	@Override
+	public void init(FilterConfig config) throws ServletException {
+	}
+
+	@Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException {
+
+		HttpServletResponse hresp = (HttpServletResponse) response;
+
+		//跨域
+		hresp.setHeader("Access-Control-Allow-Origin", "*");
+
+
+		//跨域 Header
+
+		hresp.setHeader("Access-Control-Allow-Methods", "*");
+
+		hresp.setHeader("Access-Control-Allow-Headers", "*");
+
+		// Filter 只是链式处理,请求依然转发到目的地址。
+
+		chain.doFilter(request, response);
+
+
+
+		/*XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper(
+				(HttpServletRequest) request);
+		chain.doFilter(xssRequest, response);*/
+	}
+
+	@Override
+	public void destroy() {
+	}
+
+}

+ 138 - 0
src/main/java/com/sqx/common/xss/XssHttpServletRequestWrapper.java

@@ -0,0 +1,138 @@
+package com.sqx.common.xss;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * XSS过滤处理
+ *
+ */
+public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
+    //没被包装过的HttpServletRequest(特殊场景,需要自己过滤)
+    HttpServletRequest orgRequest;
+    //html过滤
+    private final static HTMLFilter HtmlFilter = new HTMLFilter();
+
+    public XssHttpServletRequestWrapper(HttpServletRequest request) {
+        super(request);
+        orgRequest = request;
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException {
+        //非json类型,直接返回
+        if(!MediaType.APPLICATION_JSON_VALUE.equalsIgnoreCase(super.getHeader(HttpHeaders.CONTENT_TYPE))){
+            return super.getInputStream();
+        }
+
+        //为空,直接返回
+        String json = IOUtils.toString(super.getInputStream(), "utf-8");
+        if (StringUtils.isBlank(json)) {
+            return super.getInputStream();
+        }
+
+        //xss过滤
+        json = xssEncode(json);
+        final ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes("utf-8"));
+        return new ServletInputStream() {
+            @Override
+            public boolean isFinished() {
+                return true;
+            }
+
+            @Override
+            public boolean isReady() {
+                return true;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener) {
+
+            }
+
+            @Override
+            public int read() throws IOException {
+                return bis.read();
+            }
+        };
+    }
+
+    @Override
+    public String getParameter(String name) {
+        String value = super.getParameter(xssEncode(name));
+        if (StringUtils.isNotBlank(value)) {
+            value = xssEncode(value);
+        }
+        return value;
+    }
+
+    @Override
+    public String[] getParameterValues(String name) {
+        String[] parameters = super.getParameterValues(name);
+        if (parameters == null || parameters.length == 0) {
+            return null;
+        }
+
+        for (int i = 0; i < parameters.length; i++) {
+            parameters[i] = xssEncode(parameters[i]);
+        }
+        return parameters;
+    }
+
+    @Override
+    public Map<String,String[]> getParameterMap() {
+        Map<String,String[]> map = new LinkedHashMap<>();
+        Map<String,String[]> parameters = super.getParameterMap();
+        for (String key : parameters.keySet()) {
+            String[] values = parameters.get(key);
+            for (int i = 0; i < values.length; i++) {
+                values[i] = xssEncode(values[i]);
+            }
+            map.put(key, values);
+        }
+        return map;
+    }
+
+    @Override
+    public String getHeader(String name) {
+        String value = super.getHeader(xssEncode(name));
+        if (StringUtils.isNotBlank(value)) {
+            value = xssEncode(value);
+        }
+        return value;
+    }
+
+    private String xssEncode(String input) {
+        return HtmlFilter.filter(input);
+    }
+
+    /**
+     * 获取最原始的request
+     */
+    public HttpServletRequest getOrgRequest() {
+        return orgRequest;
+    }
+
+    /**
+     * 获取最原始的request
+     */
+    public static HttpServletRequest getOrgRequest(HttpServletRequest request) {
+        if (request instanceof XssHttpServletRequestWrapper) {
+            return ((XssHttpServletRequestWrapper) request).getOrgRequest();
+        }
+
+        return request;
+    }
+
+}

+ 47 - 0
src/main/java/com/sqx/config/CorsConfig.java

@@ -0,0 +1,47 @@
+package com.sqx.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+
+/**
+ * 跨域设置
+ */
+@Configuration
+public class CorsConfig implements WebMvcConfigurer {
+
+    /*private CorsConfiguration buildConfig() {
+        CorsConfiguration corsConfiguration = new CorsConfiguration();
+        // 1允许任何域名使用
+        corsConfiguration.addAllowedOrigin("*");
+        // 2允许任何头
+        corsConfiguration.addAllowedHeader("*");
+        // 3允许任何方法(post、get等)
+        corsConfiguration.addAllowedMethod("*");
+        return corsConfiguration;
+    }
+
+    @Bean
+    public CorsFilter corsFilter() {
+        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+        source.registerCorsConfiguration("/**", buildConfig());
+        return new CorsFilter(source);
+    }*/
+
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**")
+            .allowedOrigins("*")
+            .allowedOriginPatterns("*")
+            .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
+            .maxAge(3600);
+    }
+
+
+}

+ 40 - 0
src/main/java/com/sqx/config/FilterConfig.java

@@ -0,0 +1,40 @@
+package com.sqx.config;
+
+import com.sqx.common.xss.XssFilter;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.filter.DelegatingFilterProxy;
+
+import javax.servlet.DispatcherType;
+
+/**
+ * Filter配置
+ *
+ */
+@Configuration
+public class FilterConfig {
+
+    @Bean
+    public FilterRegistrationBean shiroFilterRegistration() {
+        FilterRegistrationBean registration = new FilterRegistrationBean();
+        registration.setFilter(new DelegatingFilterProxy("shiroFilter"));
+        //该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理
+        registration.addInitParameter("targetFilterLifecycle", "true");
+        registration.setEnabled(true);
+        registration.setOrder(Integer.MAX_VALUE - 1);
+        registration.addUrlPatterns("/*");
+        return registration;
+    }
+
+    @Bean
+    public FilterRegistrationBean xssFilterRegistration() {
+        FilterRegistrationBean registration = new FilterRegistrationBean();
+        registration.setDispatcherTypes(DispatcherType.REQUEST);
+        registration.setFilter(new XssFilter());
+        registration.addUrlPatterns("/*");
+        registration.setName("xssFilter");
+        registration.setOrder(Integer.MAX_VALUE);
+        return registration;
+    }
+}

+ 30 - 0
src/main/java/com/sqx/config/KaptchaConfig.java

@@ -0,0 +1,30 @@
+package com.sqx.config;
+
+import com.google.code.kaptcha.impl.DefaultKaptcha;
+import com.google.code.kaptcha.util.Config;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Properties;
+
+
+/**
+ * 生成验证码配置
+ *
+ */
+@Configuration
+public class KaptchaConfig {
+
+    @Bean
+    public DefaultKaptcha producer() {
+        Properties properties = new Properties();
+        properties.put("kaptcha.border", "no");
+        properties.put("kaptcha.textproducer.font.color", "black");
+        properties.put("kaptcha.textproducer.char.space", "5");
+        properties.put("kaptcha.textproducer.font.names", "Arial,Courier,cmr10,宋体,楷体,微软雅黑");
+        Config config = new Config(properties);
+        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
+        defaultKaptcha.setConfig(config);
+        return defaultKaptcha;
+    }
+}

+ 22 - 0
src/main/java/com/sqx/config/MybatisPlusConfig.java

@@ -0,0 +1,22 @@
+package com.sqx.config;
+
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * mybatis-plus配置
+ *
+ */
+@Configuration
+public class MybatisPlusConfig {
+
+    /**
+     * 分页插件
+     */
+    @Bean
+    public PaginationInterceptor paginationInterceptor() {
+        return new PaginationInterceptor();
+    }
+
+}

+ 54 - 0
src/main/java/com/sqx/config/RedisConfig.java

@@ -0,0 +1,54 @@
+package com.sqx.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.*;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * Redis配置
+ *
+ */
+@Configuration
+public class RedisConfig {
+    @Autowired
+    private RedisConnectionFactory factory;
+
+    @Bean
+    public RedisTemplate<String, Object> redisTemplate() {
+        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
+        redisTemplate.setKeySerializer(new StringRedisSerializer());
+        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
+        redisTemplate.setValueSerializer(new StringRedisSerializer());
+        redisTemplate.setConnectionFactory(factory);
+        return redisTemplate;
+    }
+
+    @Bean
+    public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
+        return redisTemplate.opsForHash();
+    }
+
+    @Bean
+    public ValueOperations<String, String> valueOperations(RedisTemplate<String, String> redisTemplate) {
+        return redisTemplate.opsForValue();
+    }
+
+    @Bean
+    public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
+        return redisTemplate.opsForList();
+    }
+
+    @Bean
+    public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
+        return redisTemplate.opsForSet();
+    }
+
+    @Bean
+    public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
+        return redisTemplate.opsForZSet();
+    }
+}

+ 90 - 0
src/main/java/com/sqx/config/ShiroConfig.java

@@ -0,0 +1,90 @@
+package com.sqx.config;
+
+import com.sqx.modules.sys.oauth2.OAuth2Filter;
+import com.sqx.modules.sys.oauth2.OAuth2Realm;
+import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.spring.LifecycleBeanPostProcessor;
+import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
+import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
+import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.servlet.Filter;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Shiro配置
+ *
+ */
+@Configuration
+public class ShiroConfig {
+
+    @Bean("securityManager")
+    public SecurityManager securityManager(OAuth2Realm oAuth2Realm) {
+        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
+        securityManager.setRealm(oAuth2Realm);
+        securityManager.setRememberMeManager(null);
+        return securityManager;
+    }
+
+    @Bean("shiroFilter")
+    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
+        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
+        shiroFilter.setSecurityManager(securityManager);
+
+        //oauth过滤
+        Map<String, Filter> filters = new HashMap<>();
+        filters.put("oauth2", new OAuth2Filter());
+        shiroFilter.setFilters(filters);
+
+        Map<String, String> filterMap = new LinkedHashMap<>();
+        filterMap.put("/webjars/**", "anon");
+        filterMap.put("/druid/**", "anon");
+        filterMap.put("/app/wxPay/notifyJsApi", "anon");
+        filterMap.put("/app/wxPay/notifyMp", "anon");
+        filterMap.put("/app/wxPay/notify", "anon");
+        filterMap.put("/app/aliPay/notifyApp", "anon");
+
+        filterMap.put("/activity/**", "anon");
+        filterMap.put("/banner/**", "anon");
+        filterMap.put("/courseClassification/selectCourseClassification", "anon");
+        filterMap.put("/sys/login", "anon");
+        filterMap.put("/swagger/**", "anon");
+        filterMap.put("/v2/api-docs", "anon");
+        filterMap.put("/swagger-ui.html", "anon");
+        filterMap.put("/swagger-resources/**", "anon");
+        filterMap.put("/captcha.jpg", "anon");
+        filterMap.put("/chatSocket/**", "anon");
+        filterMap.put("/websocket/**", "anon");
+        filterMap.put("/search/**", "anon");
+        filterMap.put("/alioss/**","anon");
+        filterMap.put("/adminerrand","anon");
+        filterMap.put("/timedtask/**","anon");
+        filterMap.put("/admin/invoice/export","anon");
+        filterMap.put("/app/illegalType/**","anon");
+        filterMap.put("/admin/servicetype/selectServiceTypeList", "anon");
+        filterMap.put("/app/**", "anon");
+        filterMap.put("/fixedStroke/**", "anon");
+        //filterMap.put("/app/userinfo","anon");
+        filterMap.put("/**", "oauth2");
+        shiroFilter.setFilterChainDefinitionMap(filterMap);
+
+        return shiroFilter;
+    }
+
+    @Bean("lifecycleBeanPostProcessor")
+    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
+        return new LifecycleBeanPostProcessor();
+    }
+
+    @Bean
+    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
+        AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
+        advisor.setSecurityManager(securityManager);
+        return advisor;
+    }
+
+}

+ 53 - 0
src/main/java/com/sqx/config/SwaggerConfig.java

@@ -0,0 +1,53 @@
+package com.sqx.config;
+
+import io.swagger.annotations.ApiOperation;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.ApiKey;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.List;
+
+import static com.google.common.collect.Lists.newArrayList;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig implements WebMvcConfigurer {
+
+    @Bean
+    public Docket createRestApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                //加了ApiOperation注解的类,才生成接口文档
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                //包下的类,才生成接口文档
+                //.apis(RequestHandlerSelectors.basePackage("com.sqx.controller"))
+                .paths(PathSelectors.any())
+                .build()
+                .securitySchemes(security());
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title("")
+                .description("sqx-fast文档")
+                .termsOfServiceUrl("")
+                .version("3.0.0")
+                .build();
+    }
+
+    private List<ApiKey> security() {
+        return newArrayList(
+                new ApiKey("token", "token", "header")
+        );
+    }
+
+}

+ 26 - 0
src/main/java/com/sqx/config/ThreadConfig.java

@@ -0,0 +1,26 @@
+package com.sqx.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+@Configuration
+public class ThreadConfig {
+    @Bean("urlUploadThread")
+    public ThreadPoolTaskExecutor executor(){
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        //配置核心线程数
+        executor.setCorePoolSize(15);
+        //配置最大线程数
+        executor.setMaxPoolSize(30);
+        //配置队列大小
+        executor.setQueueCapacity(1000);
+        //线程的名称前缀
+        executor.setThreadNamePrefix("Executor-");
+        //等待所有任务结束后再关闭线程池
+        executor.setWaitForTasksToCompleteOnShutdown(true);
+        //执行初始化
+        executor.initialize();
+        return executor;
+    }
+}

+ 14 - 0
src/main/java/com/sqx/datasource/annotation/DataSource.java

@@ -0,0 +1,14 @@
+package com.sqx.datasource.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 多数据源注解
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Inherited
+public @interface DataSource {
+    String value() default "";
+}

+ 61 - 0
src/main/java/com/sqx/datasource/aspect/DataSourceAspect.java

@@ -0,0 +1,61 @@
+package com.sqx.datasource.aspect;
+
+
+import com.sqx.datasource.annotation.DataSource;
+import com.sqx.datasource.config.DynamicContextHolder;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+
+/**
+ * 多数据源,切面处理类
+ */
+@Aspect
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class DataSourceAspect {
+    protected Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Pointcut("@annotation(com.sqx.datasource.annotation.DataSource) " +
+            "|| @within(com.sqx.datasource.annotation.DataSource)")
+    public void dataSourcePointCut() {
+
+    }
+
+    @Around("dataSourcePointCut()")
+    public Object around(ProceedingJoinPoint point) throws Throwable {
+        MethodSignature signature = (MethodSignature) point.getSignature();
+        Class targetClass = point.getTarget().getClass();
+        Method method = signature.getMethod();
+
+        DataSource targetDataSource = (DataSource)targetClass.getAnnotation(DataSource.class);
+        DataSource methodDataSource = method.getAnnotation(DataSource.class);
+        if(targetDataSource != null || methodDataSource != null){
+            String value;
+            if(methodDataSource != null){
+                value = methodDataSource.value();
+            }else {
+                value = targetDataSource.value();
+            }
+
+            DynamicContextHolder.push(value);
+            logger.debug("set datasource is {}", value);
+        }
+
+        try {
+            return point.proceed();
+        } finally {
+            DynamicContextHolder.poll();
+            logger.debug("clean datasource");
+        }
+    }
+}

+ 47 - 0
src/main/java/com/sqx/datasource/config/DynamicContextHolder.java

@@ -0,0 +1,47 @@
+package com.sqx.datasource.config;
+
+import java.util.ArrayDeque;
+import java.util.Deque;
+
+/**
+ * 多数据源上下文
+ */
+public class DynamicContextHolder {
+    @SuppressWarnings("unchecked")
+    private static final ThreadLocal<Deque<String>> CONTEXT_HOLDER = new ThreadLocal() {
+        @Override
+        protected Object initialValue() {
+            return new ArrayDeque();
+        }
+    };
+
+    /**
+     * 获得当前线程数据源
+     *
+     * @return 数据源名称
+     */
+    public static String peek() {
+        return CONTEXT_HOLDER.get().peek();
+    }
+
+    /**
+     * 设置当前线程数据源
+     *
+     * @param dataSource 数据源名称
+     */
+    public static void push(String dataSource) {
+        CONTEXT_HOLDER.get().push(dataSource);
+    }
+
+    /**
+     * 清空当前线程数据源
+     */
+    public static void poll() {
+        Deque<String> deque = CONTEXT_HOLDER.get();
+        deque.poll();
+        if (deque.isEmpty()) {
+            CONTEXT_HOLDER.remove();
+        }
+    }
+
+}

+ 15 - 0
src/main/java/com/sqx/datasource/config/DynamicDataSource.java

@@ -0,0 +1,15 @@
+package com.sqx.datasource.config;
+
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+/**
+ * 多数据源
+ */
+public class DynamicDataSource extends AbstractRoutingDataSource {
+
+    @Override
+    protected Object determineCurrentLookupKey() {
+        return DynamicContextHolder.peek();
+    }
+
+}

+ 53 - 0
src/main/java/com/sqx/datasource/config/DynamicDataSourceConfig.java

@@ -0,0 +1,53 @@
+package com.sqx.datasource.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.sqx.datasource.properties.DataSourceProperties;
+import com.sqx.datasource.properties.DynamicDataSourceProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 配置多数据源
+ */
+@Configuration
+@EnableConfigurationProperties(DynamicDataSourceProperties.class)
+public class DynamicDataSourceConfig {
+    @Autowired
+    private DynamicDataSourceProperties properties;
+
+    @Bean
+    @ConfigurationProperties(prefix = "spring.datasource.druid")
+    public DataSourceProperties dataSourceProperties() {
+        return new DataSourceProperties();
+    }
+
+    @Bean
+    public DynamicDataSource dynamicDataSource(DataSourceProperties dataSourceProperties) {
+        DynamicDataSource dynamicDataSource = new DynamicDataSource();
+        dynamicDataSource.setTargetDataSources(getDynamicDataSource());
+
+        //默认数据源
+        DruidDataSource defaultDataSource = DynamicDataSourceFactory.buildDruidDataSource(dataSourceProperties);
+        dynamicDataSource.setDefaultTargetDataSource(defaultDataSource);
+
+        return dynamicDataSource;
+    }
+
+    private Map<Object, Object> getDynamicDataSource(){
+        Map<String, DataSourceProperties> dataSourcePropertiesMap = properties.getDatasource();
+        Map<Object, Object> targetDataSources = new HashMap<>(dataSourcePropertiesMap.size());
+        dataSourcePropertiesMap.forEach((k, v) -> {
+            DruidDataSource druidDataSource = DynamicDataSourceFactory.buildDruidDataSource(v);
+            targetDataSources.put(k, druidDataSource);
+        });
+
+        return targetDataSources;
+    }
+
+}

+ 44 - 0
src/main/java/com/sqx/datasource/config/DynamicDataSourceFactory.java

@@ -0,0 +1,44 @@
+package com.sqx.datasource.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.sqx.datasource.properties.DataSourceProperties;
+
+import java.sql.SQLException;
+
+/**
+ * DruidDataSource
+ *
+ */
+public class DynamicDataSourceFactory {
+
+    public static DruidDataSource buildDruidDataSource(DataSourceProperties properties) {
+        DruidDataSource druidDataSource = new DruidDataSource();
+        druidDataSource.setDriverClassName(properties.getDriverClassName());
+        druidDataSource.setUrl(properties.getUrl());
+        druidDataSource.setUsername(properties.getUsername());
+        druidDataSource.setPassword(properties.getPassword());
+
+        druidDataSource.setInitialSize(properties.getInitialSize());
+        druidDataSource.setMaxActive(properties.getMaxActive());
+        druidDataSource.setMinIdle(properties.getMinIdle());
+        druidDataSource.setMaxWait(properties.getMaxWait());
+        druidDataSource.setTimeBetweenEvictionRunsMillis(properties.getTimeBetweenEvictionRunsMillis());
+        druidDataSource.setMinEvictableIdleTimeMillis(properties.getMinEvictableIdleTimeMillis());
+        druidDataSource.setMaxEvictableIdleTimeMillis(properties.getMaxEvictableIdleTimeMillis());
+        druidDataSource.setValidationQuery(properties.getValidationQuery());
+        druidDataSource.setValidationQueryTimeout(properties.getValidationQueryTimeout());
+        druidDataSource.setTestOnBorrow(properties.isTestOnBorrow());
+        druidDataSource.setTestOnReturn(properties.isTestOnReturn());
+        druidDataSource.setPoolPreparedStatements(properties.isPoolPreparedStatements());
+        druidDataSource.setMaxOpenPreparedStatements(properties.getMaxOpenPreparedStatements());
+        druidDataSource.setSharePreparedStatements(properties.isSharePreparedStatements());
+
+        try {
+            druidDataSource.setFilters(properties.getFilters());
+            druidDataSource.init();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        return druidDataSource;
+    }
+}

+ 192 - 0
src/main/java/com/sqx/datasource/properties/DataSourceProperties.java

@@ -0,0 +1,192 @@
+package com.sqx.datasource.properties;
+
+/**
+ * 多数据源属性
+ *
+ */
+public class DataSourceProperties {
+    private String driverClassName;
+    private String url;
+    private String username;
+    private String password;
+
+    /**
+     * Druid默认参数
+     */
+    private int initialSize = 2;
+    private int maxActive = 10;
+    private int minIdle = -1;
+    private long maxWait = 60 * 1000L;
+    private long timeBetweenEvictionRunsMillis = 60 * 1000L;
+    private long minEvictableIdleTimeMillis = 1000L * 60L * 30L;
+    private long maxEvictableIdleTimeMillis = 1000L * 60L * 60L * 7;
+    private String validationQuery = "select 1";
+    private int validationQueryTimeout = -1;
+    private boolean testOnBorrow = false;
+    private boolean testOnReturn = false;
+    private boolean testWhileIdle = true;
+    private boolean poolPreparedStatements = false;
+    private int maxOpenPreparedStatements = -1;
+    private boolean sharePreparedStatements = false;
+    private String filters = "stat,wall";
+
+    public String getDriverClassName() {
+        return driverClassName;
+    }
+
+    public void setDriverClassName(String driverClassName) {
+        this.driverClassName = driverClassName;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public int getInitialSize() {
+        return initialSize;
+    }
+
+    public void setInitialSize(int initialSize) {
+        this.initialSize = initialSize;
+    }
+
+    public int getMaxActive() {
+        return maxActive;
+    }
+
+    public void setMaxActive(int maxActive) {
+        this.maxActive = maxActive;
+    }
+
+    public int getMinIdle() {
+        return minIdle;
+    }
+
+    public void setMinIdle(int minIdle) {
+        this.minIdle = minIdle;
+    }
+
+    public long getMaxWait() {
+        return maxWait;
+    }
+
+    public void setMaxWait(long maxWait) {
+        this.maxWait = maxWait;
+    }
+
+    public long getTimeBetweenEvictionRunsMillis() {
+        return timeBetweenEvictionRunsMillis;
+    }
+
+    public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) {
+        this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
+    }
+
+    public long getMinEvictableIdleTimeMillis() {
+        return minEvictableIdleTimeMillis;
+    }
+
+    public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) {
+        this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
+    }
+
+    public long getMaxEvictableIdleTimeMillis() {
+        return maxEvictableIdleTimeMillis;
+    }
+
+    public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis) {
+        this.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis;
+    }
+
+    public String getValidationQuery() {
+        return validationQuery;
+    }
+
+    public void setValidationQuery(String validationQuery) {
+        this.validationQuery = validationQuery;
+    }
+
+    public int getValidationQueryTimeout() {
+        return validationQueryTimeout;
+    }
+
+    public void setValidationQueryTimeout(int validationQueryTimeout) {
+        this.validationQueryTimeout = validationQueryTimeout;
+    }
+
+    public boolean isTestOnBorrow() {
+        return testOnBorrow;
+    }
+
+    public void setTestOnBorrow(boolean testOnBorrow) {
+        this.testOnBorrow = testOnBorrow;
+    }
+
+    public boolean isTestOnReturn() {
+        return testOnReturn;
+    }
+
+    public void setTestOnReturn(boolean testOnReturn) {
+        this.testOnReturn = testOnReturn;
+    }
+
+    public boolean isTestWhileIdle() {
+        return testWhileIdle;
+    }
+
+    public void setTestWhileIdle(boolean testWhileIdle) {
+        this.testWhileIdle = testWhileIdle;
+    }
+
+    public boolean isPoolPreparedStatements() {
+        return poolPreparedStatements;
+    }
+
+    public void setPoolPreparedStatements(boolean poolPreparedStatements) {
+        this.poolPreparedStatements = poolPreparedStatements;
+    }
+
+    public int getMaxOpenPreparedStatements() {
+        return maxOpenPreparedStatements;
+    }
+
+    public void setMaxOpenPreparedStatements(int maxOpenPreparedStatements) {
+        this.maxOpenPreparedStatements = maxOpenPreparedStatements;
+    }
+
+    public boolean isSharePreparedStatements() {
+        return sharePreparedStatements;
+    }
+
+    public void setSharePreparedStatements(boolean sharePreparedStatements) {
+        this.sharePreparedStatements = sharePreparedStatements;
+    }
+
+    public String getFilters() {
+        return filters;
+    }
+
+    public void setFilters(String filters) {
+        this.filters = filters;
+    }
+}

+ 22 - 0
src/main/java/com/sqx/datasource/properties/DynamicDataSourceProperties.java

@@ -0,0 +1,22 @@
+package com.sqx.datasource.properties;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 多数据源属性
+ */
+@ConfigurationProperties(prefix = "dynamic")
+public class DynamicDataSourceProperties {
+    private Map<String, DataSourceProperties> datasource = new LinkedHashMap<>();
+
+    public Map<String, DataSourceProperties> getDatasource() {
+        return datasource;
+    }
+
+    public void setDatasource(Map<String, DataSourceProperties> datasource) {
+        this.datasource = datasource;
+    }
+}

+ 12 - 0
src/main/java/com/sqx/modules/app/annotation/Login.java

@@ -0,0 +1,12 @@
+package com.sqx.modules.app.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * app登录效验
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Login {
+}

+ 16 - 0
src/main/java/com/sqx/modules/app/annotation/LoginUser.java

@@ -0,0 +1,16 @@
+package com.sqx.modules.app.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 登录用户信息
+ *
+ */
+@Target(ElementType.PARAMETER)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LoginUser {
+
+}

+ 38 - 0
src/main/java/com/sqx/modules/app/config/WebMvcConfig.java

@@ -0,0 +1,38 @@
+package com.sqx.modules.app.config;
+
+import com.sqx.modules.app.interceptor.AuthorizationInterceptor;
+import com.sqx.modules.app.resolver.LoginUserHandlerMethodArgumentResolver;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.List;
+
+/**
+ * MVC配置
+ *
+ */
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+    @Autowired
+    private AuthorizationInterceptor authorizationInterceptor;
+    @Autowired
+    private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver;
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(authorizationInterceptor).addPathPatterns("/app/**");
+    }
+
+    @Override
+    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
+        argumentResolvers.add(loginUserHandlerMethodArgumentResolver);
+    }
+
+
+
+
+}

+ 70 - 0
src/main/java/com/sqx/modules/app/controller/AppUpgradeController.java

@@ -0,0 +1,70 @@
+package com.sqx.modules.app.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.entity.App;
+import com.sqx.modules.app.service.AppService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * APP登录授权
+ *
+ */
+@RestController
+@RequestMapping("/appinfo")
+@Api(value = "APP升级管理", tags = {"APP升级管理"})
+public class AppUpgradeController {
+
+    @Autowired
+    private AppService iAppService;
+
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ApiOperation("管理平台升级详情")
+    @ResponseBody
+    public Result list(Integer page,Integer limit) {
+        IPage<App> pages =new Page<>(page,limit);
+        return Result.success().put("data",iAppService.page(pages));
+    }
+
+
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ApiOperation("管理平台升级详情")
+    @ResponseBody
+    public Result getBanner(@PathVariable Long id) {
+        return Result.success().put("data",iAppService.selectAppById(id));
+    }
+
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ApiOperation("管理平台添加升级信息")
+    @ResponseBody
+    public Result addBanner(@RequestBody App app) {
+        if(app.getId()!=null){
+            iAppService.updateAppById(app);
+        }else{
+            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            app.setCreateAt(sdf.format(new Date()));
+            iAppService.insertApp(app);
+        }
+        return Result.success();
+    }
+
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
+    @ApiOperation("管理平台删除升级信息")
+    public Result deleteBanner(@PathVariable Long id) {
+        iAppService.deleteAppById(id);
+        return Result.success();
+    }
+
+
+
+
+
+}

+ 352 - 0
src/main/java/com/sqx/modules/app/controller/UserController.java

@@ -0,0 +1,352 @@
+package com.sqx.modules.app.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sqx.common.utils.DateUtils;
+import com.sqx.common.utils.PageUtils;
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.dao.UserDao;
+import com.sqx.modules.app.dao.UserMoneyDao;
+import com.sqx.modules.app.entity.UserEntity;
+import com.sqx.modules.app.entity.UserMoney;
+import com.sqx.modules.app.entity.UserMoneyDetails;
+import com.sqx.modules.app.entity.UserVip;
+import com.sqx.modules.app.response.HomeMessageResponse;
+import com.sqx.modules.app.response.UserMessageResponse;
+import com.sqx.modules.app.service.UserMoneyDetailsService;
+import com.sqx.modules.app.service.UserMoneyService;
+import com.sqx.modules.app.service.UserService;
+import com.sqx.modules.app.service.UserVipService;
+import com.sqx.modules.common.service.CommonInfoService;
+import com.sqx.modules.creditRecord.service.CreditRecordService;
+import com.sqx.modules.message.entity.MessageInfo;
+import com.sqx.modules.message.service.MessageService;
+import com.sqx.modules.orders.service.OrdersService;
+import com.sqx.modules.pay.service.CashOutService;
+import com.sqx.modules.pay.service.PayDetailsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author fang
+ * @date 2020/7/30
+ */
+@RestController
+@Api(value = "用户管理", tags = {"用户管理"})
+@RequestMapping(value = "/user")
+public class UserController {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private UserMoneyDetailsService userMoneyDetailsService;
+    @Autowired
+    private UserMoneyService userMoneyService;
+    @Autowired
+    private PayDetailsService payDetailsService;
+    @Autowired
+    private CommonInfoService commonInfoService;
+    @Autowired
+    private UserDao userDao;
+    @Autowired
+    private CreditRecordService recordService;
+    @Autowired
+    private MessageService messageService;
+    @Autowired
+    private CashOutService cashOutService;
+    @Autowired
+    private OrdersService ordersService;
+    @Autowired
+    private UserVipService userVipService;
+
+    @ApiOperation("赠送用户会员")
+    @PostMapping("/giveUserVip")
+    public Result giveUserVip(Long userId, Integer type, Integer day) {
+        return userService.giveUserVip(userId, type, day);
+    }
+
+    @GetMapping(value = "/getRiderList")
+    @ApiOperation("获取骑手列表")
+    public Result getRiderList(Integer page, Integer limit, UserEntity userEntity) {
+        return Result.success().put("data", userMoneyService.getRiderList(page, limit, userEntity));
+    }
+
+
+    @RequestMapping(value = "/{userId}", method = RequestMethod.GET)
+    @ApiOperation("获取用户详细信息")
+    @ResponseBody
+    public Result selectUserById(@ApiParam("用户id") @PathVariable Long userId) {
+        Map<String, Object> map = new HashMap<>();
+        UserEntity userEntity = userService.queryByUserId(userId);
+        UserVip userVip = userVipService.selectUserVipByUserId(userId);
+        if(userVip!=null){
+            userEntity.setIsVip(userVip.getIsVip());
+            userEntity.setEndTime(userVip.getEndTime());
+        }else{
+            userEntity.setIsVip(2);
+        }
+        UserMoney userMoney = userMoneyService.selectUserMoneyByUserId(userId);
+        Double money = userMoney.getMoney().doubleValue();
+        Double inviteMoney = userMoney.getInviteMoney().doubleValue();
+        String date = DateUtils.format(new Date());
+        //查询本月充值
+        Double consume = payDetailsService.instantselectSumPay(date, userId);
+        //查询本月提现
+        BigDecimal income = cashOutService.sumMoney(date, "month",1);
+        //查询邀请人数
+        int count = userService.queryInviterCount(userEntity.getInvitationCode());
+        //本月接单
+        int takeOrdersCount = ordersService.selectTakeOrdersCount(userId, date);
+        //本月订单
+        int myOrdersCount = ordersService.selectMyOrdersCount(userId, date);
+
+        map.put("money", money);
+        map.put("inviteMoney", inviteMoney);
+        map.put("userEntity", userEntity);
+        map.put("consume", consume);
+        map.put("income", income);
+        map.put("count", count);
+        map.put("takeOrdersCount", takeOrdersCount);
+        map.put("myOrdersCount", myOrdersCount);
+        return Result.success().put("data", map);
+    }
+
+
+    @RequestMapping(value = "/addCannotMoney/{userId}/{money}/{type}", method = RequestMethod.POST)
+    @ApiOperation("修改金额")
+    @ResponseBody
+    public Result addCannotMoney(@PathVariable("userId") Long userId, @PathVariable("money") Double money, @PathVariable("type") Integer type) {
+        UserMoneyDetails userMoneyDetails = new UserMoneyDetails();
+        if (type == 1) {
+            userDao.updateMoney(1, userId, money);
+            userMoneyDetails.setMoney(BigDecimal.valueOf(money));
+            userMoneyDetails.setUserType(2);
+            userMoneyDetails.setUserId(userId);
+            userMoneyDetails.setContent("管理端充值:" + money);
+            userMoneyDetails.setTitle("管理端充值金额");
+            userMoneyDetails.setType(1);
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            userMoneyDetails.setCreateTime(simpleDateFormat.format(new Date()));
+        } else {
+            userDao.updateMoney(2, userId, money);
+            userMoneyDetails.setUserType(2);
+            userMoneyDetails.setMoney(BigDecimal.valueOf(money));
+            userMoneyDetails.setUserId(userId);
+            userMoneyDetails.setContent("管理端减少:" + money);
+            userMoneyDetails.setTitle("管理端减少金额");
+            userMoneyDetails.setType(2);
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            userMoneyDetails.setCreateTime(simpleDateFormat.format(new Date()));
+
+        }
+        userMoneyDetailsService.save(userMoneyDetails);
+        return Result.success();
+    }
+
+
+    @RequestMapping(value = "/selectUserList", method = RequestMethod.GET)
+    @ApiOperation("查询所有用户列表")
+    @ResponseBody
+    public Result selectUserList(Integer page, Integer limit,UserEntity userEntity) {
+        return Result.success().put("data", userService.selectUserPage(page, limit, userEntity));
+    }
+
+
+    @RequestMapping(value = "/deleteUserByUserId/{userId}", method = RequestMethod.POST)
+    @ApiOperation("删除用户")
+    @ResponseBody
+    public Result deleteUserByUserId(@PathVariable("userId") Long userId) {
+        userService.removeById(userId);
+        return Result.success();
+    }
+
+    @RequestMapping(value = "/updateUserByUserId", method = RequestMethod.POST)
+    @ApiOperation("修改用户")
+    @ResponseBody
+    public Result updateUserByUserId(@RequestBody UserEntity userEntity) {
+
+        userService.updateById(userEntity);
+        return Result.success();
+    }
+
+    @RequestMapping(value = "/updateUserStatusByUserId", method = RequestMethod.GET)
+    @ApiOperation("禁用或启用用户")
+    @ResponseBody
+    public Result updateUserByUserId(Long userId) {
+        UserEntity byId = userService.getById(userId);
+        if (byId.getStatus().equals(1)) {
+            byId.setStatus(2);
+        } else {
+            byId.setStatus(1);
+        }
+        userService.updateById(byId);
+        return Result.success();
+    }
+
+
+    /**
+     * 获取openid
+     *
+     * @param code 微信code
+     * @return openid
+     */
+    @GetMapping("/openId/{code:.+}/{userId}")
+    @ApiOperation("根据code获取openid")
+    public Result getOpenid(@PathVariable("code") String code, @PathVariable("userId") Long userId) {
+        return userService.getOpenId(code, userId);
+    }
+
+    /**
+     * 信息分析
+     *
+     * @return
+     */
+    @GetMapping("/homeMessage")
+    @ApiOperation("信息分析")
+    public Result homeMessage() {
+        HomeMessageResponse homeMessageResponse = new HomeMessageResponse();
+        //   0查总   1查天  2查月  3查年
+        //设置总用户人数
+        homeMessageResponse.setTotalUsers(userService.queryUserCount(0, null));
+        //设置今日新增
+        homeMessageResponse.setNewToday(userService.queryUserCount(1, null));
+        //设置本月新增
+        homeMessageResponse.setNewMonth(userService.queryUserCount(2, null));
+        //设置本年新增
+        homeMessageResponse.setNewYear(userService.queryUserCount(3, null));
+
+        //设置总收入
+        homeMessageResponse.setTotalRevenue(userService.queryPayMoney(0));
+        //设置今日收入
+        homeMessageResponse.setTodayRevenue(userService.queryPayMoney(1));
+        //设置本月收入
+        homeMessageResponse.setMonthRevenue(userService.queryPayMoney(2));
+        //设置本年收入
+        homeMessageResponse.setYearRevenue(userService.queryPayMoney(3));
+
+        return Result.success().put("data", homeMessageResponse);
+    }
+
+    /**
+     * 接单分析
+     *
+     * @return
+     */
+    @GetMapping("/takingOrdersMessage")
+    @ApiOperation("接单分析")
+    public Result takingOrdersMessage(Long page, Long limit, String date, Long type) {
+        Page<Map<String, Object>> iPage = new Page<>(page, limit);
+        return userService.takingOrdersMessage(iPage, type, date);
+    }
+
+    /**
+     * 用户分析
+     */
+    @GetMapping("/userMessage")
+    @ApiOperation("用户分析")
+    public Result userMessage(String date, int type) {
+        UserMessageResponse userMessageResponse = new UserMessageResponse();
+        userMessageResponse.setTotalNumber(userService.queryUserCount(type, date));
+        userMessageResponse.setVipUserNumber(userService.userMessage(date, type));
+        userMessageResponse.setUserNumber(userService.queryUserCount(type, date) - userService.userMessage(date, type));
+        return Result.success().put("data", userMessageResponse);
+    }
+
+    @GetMapping("/updateUserMoney")
+    @ApiOperation("修改用户余额")
+    public Result updateUserMoney(Integer type, Long userId, BigDecimal money) {
+        return userMoneyService.updateUserMoney(type, userId, money);
+    }
+
+    /**
+     * @param userId 用户id
+     * @param type   1:增加 2减少
+     * @param score  操作的分数
+     * @return
+     */
+    @ApiOperation("修改用户信用分")
+    @PostMapping("updateUserCredit")
+    public Result updateUserCredit(Long userId, Integer type, Integer score, String remark) {
+        int maxScore = Integer.parseInt(commonInfoService.findOne(363).getValue());
+        if (score <= 0) {
+            return Result.error("请填入大于0的数");
+        }
+        UserEntity userEntity = userService.getById(userId);
+        String text;
+        if (type == 1) {
+            text = "增加";
+            if (userEntity.getCreditScore() + score > maxScore) {
+                return Result.error("最多增加" + (maxScore - userEntity.getCreditScore()) + "分");
+            }
+            recordService.updateUserCreditRecord(userEntity, 1, score, remark);
+        } else {
+            text = "扣除";
+            if (userEntity.getCreditScore() < score) {
+                return Result.error("当前用户最多扣除" + userEntity.getCreditScore() + "分");
+            }
+            recordService.updateUserCreditRecord(userEntity, 2, score, remark);
+        }
+        MessageInfo riderMessageInfo = new MessageInfo();
+        riderMessageInfo.setContent("管理员" + text + "您" + score + "信用分,当前信用分" + userEntity.getCreditScore());
+        riderMessageInfo.setTitle("信用分变动通知");
+        riderMessageInfo.setState(String.valueOf(5));
+        riderMessageInfo.setUserName(userEntity.getUserName());
+        riderMessageInfo.setUserId(String.valueOf(userEntity.getUserId()));
+        riderMessageInfo.setCreateAt(DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+        riderMessageInfo.setIsSee("0");
+        messageService.save(riderMessageInfo);
+        return messageService.save(riderMessageInfo) ? Result.success() : Result.error();
+    }
+
+    @ApiOperation("数据中心")
+    @GetMapping(value = "findDataCenter")
+    public Result findDataCenter() {
+        return userService.findDataCenter();
+    }
+
+    @ApiOperation("用户筛选")
+    @GetMapping(value = "selectUserStatistics")
+    public Result selectUserStatistics(String date, Integer dateType) {
+        return userService.selectUserStatistics(date, dateType);
+    }
+
+    @GetMapping("/selectUserCountStatisticsByTime")
+    @ApiOperation("用户统计")
+    public Result selectUserCountStatisticsByTime(String startTime,String endTime){
+        List<Integer> userCountList=new ArrayList<>();
+        List<String> year=new ArrayList<>();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar=Calendar.getInstance();
+        Date parse = null;
+        try {
+            parse = simpleDateFormat.parse(startTime);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        calendar.setTime(parse);
+        while (true){
+            String dateTime = simpleDateFormat.format(calendar.getTime());
+            int i = userService.queryUserCount(1, dateTime);
+            userCountList.add(i);
+            year.add(dateTime);
+            if(dateTime.equals(endTime)){
+                break;
+            }
+            calendar.add(Calendar.DATE,1);
+        }
+        Map<String,Object> result=new HashMap<>();
+        result.put("userCountList",userCountList);
+        result.put("year",year);
+        return Result.success().put("data",result);
+    }
+
+
+}

+ 36 - 0
src/main/java/com/sqx/modules/app/controller/UserMoneyController.java

@@ -0,0 +1,36 @@
+package com.sqx.modules.app.controller;
+
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.annotation.Login;
+import com.sqx.modules.app.service.UserMoneyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+
+@RestController
+@RequestMapping("/userMoney")
+@AllArgsConstructor
+@Api(value = "钱包", tags = {"钱包"})
+public class UserMoneyController {
+
+    @Autowired
+    private UserMoneyService userMoneyService;
+
+    @GetMapping("/selectUserMoney")
+    @ApiOperation("查询用户钱包余额")
+    public Result selectUserMoney(Long userId){
+        return Result.success().put("data",userMoneyService.selectUserMoneyByUserId(userId));
+    }
+
+    @ApiOperation("修改用户保证金")
+    @GetMapping(value = "/updateCashDeposit")
+    public Result updateCashDeposit(Long userId, BigDecimal money, Integer type) {
+
+        return userMoneyService.updateCashDeposit(userId, money, type);
+    }
+
+}

+ 46 - 0
src/main/java/com/sqx/modules/app/controller/UserMoneyDetailsController.java

@@ -0,0 +1,46 @@
+package com.sqx.modules.app.controller;
+
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.entity.UserMoneyDetails;
+import com.sqx.modules.app.service.UserMoneyDetailsService;
+import com.sqx.modules.sys.entity.SysUserEntity;
+import com.sqx.modules.sys.service.SysUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/Details")
+@AllArgsConstructor
+@Api(value = "钱包明细", tags = {"钱包明细"})
+public class UserMoneyDetailsController {
+    @Autowired
+    private UserMoneyDetailsService userMoneyDetailsService;
+
+
+    @ApiOperation("钱包明细")
+    @GetMapping("/queryUserMoneyDetails")
+    public Result queryUserMoneyDetails(Integer page, Integer limit, UserMoneyDetails userMoneyDetails) {
+
+        return userMoneyDetailsService.queryUserMoneyDetails(page, limit, userMoneyDetails);
+    }
+
+    @ApiOperation("钱包明细")
+    @GetMapping("/selectUserMoneyDetails")
+    public Result selectUserMoneyDetails(Integer page, Integer limit,Long userId, Integer classify) {
+        return userMoneyDetailsService.selectUserMoneyDetails(page, limit, userId,classify);
+    }
+
+    @ApiOperation("保证金管理")
+    @GetMapping(value = "/selectCashDeposit")
+    public Result selectCashDeposit(String phone, Integer type, Integer page, Integer limit, Long userId) {
+        return userMoneyDetailsService.selectCashDeposit(phone, type, page, limit, userId);
+    }
+
+}

+ 58 - 0
src/main/java/com/sqx/modules/app/controller/VipDetailsController.java

@@ -0,0 +1,58 @@
+package com.sqx.modules.app.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sqx.common.utils.PageUtils;
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.entity.VipDetails;
+import com.sqx.modules.app.service.VipDetailsService;
+import com.sqx.modules.tbCoupon.entity.TbCoupon;
+import com.sqx.modules.tbCoupon.service.TbCouponService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+@Api(value = "会员管理", tags = {"会员管理"})
+@RequestMapping(value = "/vipDetails")
+public class VipDetailsController {
+
+    @Autowired
+    private VipDetailsService vipDetailsService;
+    @Autowired
+    private TbCouponService couponService;
+
+    @ApiParam("添加会员的详情信息")
+    @PostMapping("/insertVipDetails")
+    public Result insertVipDetails(@RequestBody VipDetails vipDetails) {
+        return vipDetailsService.insertVipDetails(vipDetails);
+    }
+
+
+    @ApiParam("修改会员的详情信息")
+    @PostMapping("/updateVipDetails")
+    public Result updateVipDetails(@RequestBody VipDetails vipDetails) {
+        vipDetailsService.updateById(vipDetails);
+        return Result.success();
+    }
+
+    @ApiParam("删除的详情信息")
+    @PostMapping("/deleteVipDetails")
+    public Result deleteVipDetails(Long id) {
+        vipDetailsService.removeById(id);
+        return Result.success();
+    }
+
+    @ApiParam("查询会员列表")
+    @GetMapping("/selectVipDetailsList")
+    public Result selectVipDetailsList(Integer page,Integer limit) {
+        IPage<VipDetails> vipDetailsIPage = vipDetailsService.page(new Page<>(page, limit));
+        return Result.success().put("data",new PageUtils(vipDetailsIPage));
+    }
+
+}

+ 255 - 0
src/main/java/com/sqx/modules/app/controller/app/AppController.java

@@ -0,0 +1,255 @@
+package com.sqx.modules.app.controller.app;
+
+
+import com.aliyun.dyplsapi20170525.models.BindAxnResponse;
+import com.aliyun.dyplsapi20170525.models.BindAxnResponseBody;
+import com.aliyun.dyplsapi20170525.models.UpdateSubscriptionResponse;
+import com.aliyun.dyplsapi20170525.models.UpdateSubscriptionResponseBody;
+import com.aliyun.tea.TeaException;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.sqx.common.utils.DateUtils;
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.annotation.Login;
+import com.sqx.modules.app.annotation.LoginUser;
+import com.sqx.modules.app.entity.UserEntity;
+import com.sqx.modules.app.service.AppService;
+import com.sqx.modules.app.service.UserService;
+import com.sqx.modules.common.service.CommonInfoService;
+import com.sqx.modules.message.dao.MessageInfoDao;
+import com.sqx.modules.message.entity.MessageInfo;
+import com.sqx.modules.timedtask.service.RiderLocationService;
+import com.sqx.modules.utils.MD5Util;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.Duration;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * APP登录授权
+ */
+@RestController
+@RequestMapping("/app/user")
+@Api(value = "APP管理", tags = {"APP管理"})
+public class AppController {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private AppService appService;
+    @Autowired
+    private RiderLocationService riderLocationService;
+    @Autowired
+    private MessageInfoDao messageInfoDao;
+    @Autowired
+    private CommonInfoService commonInfoService;
+
+    @Login
+    @ApiOperation("生成虚拟号码")
+    @GetMapping("/insertVirtualPhone")
+    public Result insertVirtualPhone(String phoneA, String phoneB) {
+        MessageInfo messageInfo1 = messageInfoDao.selectOne(new QueryWrapper<MessageInfo>().eq("user_name", phoneA).eq("by_user_name", phoneB));
+        if (messageInfo1 == null) {
+            messageInfo1 = messageInfoDao.selectOne(new QueryWrapper<MessageInfo>().eq("user_name", phoneB).eq("by_user_name", phoneA));
+        }
+        String accessKeyId = commonInfoService.findOne(386).getValue();
+        String accessKeySecret = commonInfoService.findOne(387).getValue();
+        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
+                // 必填,您的 AccessKey ID
+                .setAccessKeyId(accessKeyId)
+                // 必填,您的 AccessKey Secret
+                .setAccessKeySecret(accessKeySecret);
+        // 访问的域名
+        config.endpoint = "dyplsapi.aliyuncs.com";
+        try {
+            String poolKey = commonInfoService.findOne(382).getValue();
+            com.aliyun.dyplsapi20170525.Client client = new com.aliyun.dyplsapi20170525.Client(config);
+            if (messageInfo1 != null) {
+                com.aliyun.dyplsapi20170525.models.UpdateSubscriptionRequest updateSubscriptionRequest = new com.aliyun.dyplsapi20170525.models.UpdateSubscriptionRequest();
+                com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
+                updateSubscriptionRequest.setPoolKey(poolKey);
+                updateSubscriptionRequest.setSubsId(messageInfo1.getTitle());
+                updateSubscriptionRequest.setPhoneNoX(messageInfo1.getContent());
+                String value = commonInfoService.findOne(418).getValue();
+                if("是".equals(value)){
+                    updateSubscriptionRequest.setIsRecordingEnabled(true);
+                }
+                Calendar calendar=Calendar.getInstance();
+                calendar.add(Calendar.HOUR,1);
+                updateSubscriptionRequest.setExpiration(DateUtils.format(calendar.getTime()));
+                updateSubscriptionRequest.setOperateType("updateExpire");
+                UpdateSubscriptionResponse updateSubscriptionResponse = client.updateSubscriptionWithOptions(updateSubscriptionRequest, runtime);
+                UpdateSubscriptionResponseBody body = updateSubscriptionResponse.getBody();
+                String code = body.getCode();
+                if("OK".equals(code)){
+                    return Result.success().put("data", messageInfo1.getContent());
+                }
+                messageInfoDao.deleteById(messageInfo1.getId());
+            }
+            MessageInfo messageInfo = new MessageInfo();
+            messageInfo.setState("18");
+            messageInfo.setUserName(phoneA);
+            messageInfo.setByUserName(phoneB);
+            com.aliyun.dyplsapi20170525.models.BindAxnRequest bindAxnRequest = new com.aliyun.dyplsapi20170525.models.BindAxnRequest();
+            bindAxnRequest.setPoolKey(poolKey);
+            bindAxnRequest.setPhoneNoA(phoneA);
+            bindAxnRequest.setPhoneNoB(phoneB);
+            String value = commonInfoService.findOne(418).getValue();
+            if("是".equals(value)){
+                bindAxnRequest.setIsRecordingEnabled(true);
+            }
+            Calendar calendar = Calendar.getInstance();
+            calendar.add(Calendar.HOUR, 1);
+            bindAxnRequest.setExpiration(DateUtils.format(calendar.getTime()));
+            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
+            BindAxnResponse bindAxnResponse = client.bindAxnWithOptions(bindAxnRequest, runtime);
+            BindAxnResponseBody body = bindAxnResponse.getBody();
+            String code = body.code;
+            if (!"OK".equals(code)) {
+                return Result.error("获取号码失败!" + body.getMessage());
+            }
+            BindAxnResponseBody.BindAxnResponseBodySecretBindDTO secretBindDTO = body.getSecretBindDTO();
+            messageInfo.setContent(secretBindDTO.getSecretNo());
+            messageInfo.setTitle(secretBindDTO.getSubsId());
+            messageInfo.setCreateAt(DateUtils.format(new Date()));
+            messageInfoDao.insert(messageInfo);
+            return Result.success().put("data", secretBindDTO.getSecretNo());
+        } catch (TeaException error) {
+            // 如有需要,请打印 error
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        } catch (Exception _error) {
+            TeaException error = new TeaException(_error.getMessage(), _error);
+            // 如有需要,请打印 error
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        }
+        return Result.error("获取号码失败!");
+    }
+
+    @Login
+    @RequestMapping(value = "/updatePwd", method = RequestMethod.POST)
+    @ResponseBody
+    @ApiOperation("用户端修改密码")
+    public Result updatePwd(@LoginUser UserEntity user, String pwd, String oldPwd) {
+        if (!user.getPassword().equals(DigestUtils.sha256Hex(oldPwd))) {
+            return Result.error("原始密码不正确!");
+        }
+        if (pwd.equals(oldPwd)) {
+            return Result.error("新密码不能与旧密码相同!");
+        }
+        user.setPassword(DigestUtils.sha256Hex(pwd));
+        userService.updateById(user);
+        return Result.success();
+    }
+
+    @Login
+    @RequestMapping(value = "/updatePhone", method = RequestMethod.POST)
+    @ApiOperation("用户端换绑手机号")
+    @ResponseBody
+    public Result updatePhone(@RequestAttribute("userId") Long userId, @RequestParam String phone, @RequestParam String msg) {
+        return userService.updatePhone(phone, msg, userId);
+    }
+
+    @Login
+    @RequestMapping(value = "/updateUser", method = RequestMethod.POST)
+    @ApiOperation("用户修改个人信息")
+    @ResponseBody
+    public Result updateUser(@RequestBody UserEntity userEntity, @RequestAttribute("userId") Long userId) {
+        userEntity.setUserId(userId);
+        userService.updateById(userEntity);
+        return Result.success();
+    }
+
+
+
+    @Login
+    @RequestMapping(value = "/updateUserImageUrl", method = RequestMethod.POST)
+    @ApiOperation("用户修改头像")
+    @ResponseBody
+    public Result updateUserImageUrl(@LoginUser UserEntity user, String avatar) {
+        user.setAvatar(avatar);
+        userService.updateById(user);
+        return Result.success();
+    }
+
+    @Login
+    @RequestMapping(value = "/updateUserName", method = RequestMethod.POST)
+    @ApiOperation("用户修改昵称")
+    @ResponseBody
+    public Result updateUserName(@LoginUser UserEntity user, String userName) {
+        user.setNickName(userName);
+        userService.updateById(user);
+        return Result.success();
+    }
+
+    @Login
+    @RequestMapping(value = "/selectUserById", method = RequestMethod.GET)
+    @ApiOperation("获取用户详细信息")
+    @ResponseBody
+    public Result selectUserById(@LoginUser UserEntity user) {
+        return Result.success().put("data", user);
+    }
+
+    @RequestMapping(value = "/selectUserDetails", method = RequestMethod.GET)
+    @ApiOperation("获取用户详细信息")
+    @ResponseBody
+    public Result selectUserDetails(Long userId) {
+        return Result.success().put("data", userService.selectUserById(userId));
+    }
+
+
+    @RequestMapping(value = "/selectNewApp", method = RequestMethod.GET)
+    @ApiOperation("升级检测")
+    @ResponseBody
+    public Result selectNewApp() {
+        return Result.success().put("data", appService.selectNewApp());
+    }
+
+    @RequestMapping(value = "/updateClientId", method = RequestMethod.GET)
+    @ApiOperation("绑定ClientId")
+    @ResponseBody
+    public Result updateClientId(String clientId, Long userId, Integer sysPhone) {
+        UserEntity userEntity = new UserEntity();
+        userEntity.setSysPhone(sysPhone);
+        userEntity.setUserId(userId);
+        userEntity.setClientid(clientId);
+        userService.updateById(userEntity);
+        return Result.success();
+    }
+
+    @RequestMapping(value = "/updateClientRiderId", method = RequestMethod.GET)
+    @ApiOperation("绑定师傅ClientId")
+    @ResponseBody
+    public Result updateClientRiderId(String clientRiderId, Long userId, Integer sysPhone) {
+        UserEntity userEntity = new UserEntity();
+        userEntity.setSysPhone(sysPhone);
+        userEntity.setUserId(userId);
+        userEntity.setClientRiderId(clientRiderId);
+        userService.updateById(userEntity);
+        return Result.success();
+    }
+
+    @Login
+    @GetMapping("/queryInviterCount")
+    public Result select(@LoginUser UserEntity userEntity) {
+        int count = userService.queryInviterCount(userEntity.getInvitationCode());
+        return Result.success().put("data", count);
+    }
+
+    /**
+     * (师傅端)获取附近司机
+     * @return
+     */
+    @Login
+    @GetMapping("getRiderCount")
+    public Result getRiderCount(@RequestAttribute("userId") Long userId, String city, Double lng, Double lat) {
+        return Result.success().put("data", riderLocationService.getRiderCount(userId, city, lng, lat));
+    }
+}

+ 298 - 0
src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java

@@ -0,0 +1,298 @@
+package com.sqx.modules.app.controller.app;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.entity.UserEntity;
+import com.sqx.modules.app.service.IAppleService;
+import com.sqx.modules.app.service.UserService;
+import com.sqx.modules.app.utils.UserConstantInterface;
+import com.sqx.modules.app.utils.WxPhone;
+import com.sqx.modules.common.entity.CommonInfo;
+import com.sqx.modules.common.service.CommonInfoService;
+import com.sqx.modules.message.entity.MessageInfo;
+import com.sqx.modules.message.service.MessageService;
+import com.sqx.modules.utils.HttpClientUtil;
+import com.sqx.modules.utils.MD5Util;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import weixin.popular.api.SnsAPI;
+import weixin.popular.bean.sns.SnsToken;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * APP登录授权
+ */
+@RestController
+@RequestMapping("/app/Login")
+@Api(value = "APP登录接口", tags = {"APP登录接口"})
+@Slf4j
+public class AppLoginController {
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private IAppleService appleService;
+    @Autowired
+    private CommonInfoService commonInfoService;
+    @Autowired
+    private MessageService messageService;
+
+    @ApiOperation("用户端微信小程序登陆")
+    @RequestMapping(value = "/wxLogin", method = RequestMethod.GET)
+    public Result wxLogin(@ApiParam("小程序code码") String code) {
+        return userService.wxLogin(code, 1);
+    }
+
+
+    @ApiOperation("用户端小程序登录新增或修改个人信息")
+    @RequestMapping(value = "/insertWxUser", method = RequestMethod.POST)
+    public Result insertWxUser(@RequestBody UserEntity userInfo) {
+        userInfo.setUserType(1);
+        return userService.wxRegister(userInfo);
+    }
+
+
+    @ApiOperation("师傅师傅微信小程序登陆")
+    @RequestMapping(value = "/wxRiderLogin", method = RequestMethod.GET)
+    public Result wxRiderLogin(@ApiParam("小程序code码") String code) {
+        return userService.wxLogin(code, 2);
+    }
+
+
+    @ApiOperation("师傅师傅小程序登录新增或修改个人信息")
+    @RequestMapping(value = "/insertWxRiderUser", method = RequestMethod.POST)
+    public Result insertWxRiderUser(@RequestBody UserEntity userInfo) {
+        userInfo.setUserType(2);
+        return userService.wxRegister(userInfo);
+    }
+
+
+    @RequestMapping(value = "/appleLogin", method = RequestMethod.GET)
+    @ApiOperation("苹果登陆获取appleUserId")
+    public Result loginVerify(@RequestParam("identityToken") String identityToken) {
+        try {
+            log.info("苹果token:{}", identityToken);
+            JSONObject jsonObject = JSON.parseObject(identityToken);
+            JSONObject userInfo = jsonObject.getJSONObject("userInfo");
+            String identityTokens = userInfo.getString("identityToken");
+            return appleService.getAppleUserInfo(identityTokens);
+        } catch (Exception e) {
+            log.error("苹果token校验失败:{}", identityToken, e);
+            return Result.error("苹果账号验证失败,请退出重试!");
+        }
+    }
+
+
+    @ApiOperation("苹果登录")
+    @RequestMapping(value = "/insertAppleUser", method = RequestMethod.GET)
+    public Result insertAppleUser(@RequestParam String appleId) {
+        return userService.iosRegister(appleId);
+    }
+
+    @RequestMapping(value = "/iosBindMobile", method = RequestMethod.POST)
+    @ApiOperation("苹果登录绑定手机号")
+    @ResponseBody
+    public Result iosBindMobile(@RequestParam String phone, @RequestParam String code, @RequestParam String appleId, @RequestParam String platform, @RequestParam Integer sysPhone) {
+        return userService.iosBindMobile(phone, code, appleId, platform, sysPhone);
+    }
+
+
+    @RequestMapping(value = "/wxAppLogin", method = RequestMethod.POST)
+    @ApiOperation("微信APP登录")
+    @ResponseBody
+    public Result wxAppLogin(@RequestParam String wxOpenId, @RequestParam String token) {
+        return userService.wxAppLogin(wxOpenId, token);
+    }
+
+
+    @RequestMapping(value = "/wxBindMobile", method = RequestMethod.POST)
+    @ApiOperation("微信登录绑定手机号")
+    @ResponseBody
+    public Result wxBindMobile(@RequestParam String phone, @RequestParam String code, @RequestParam String wxOpenId, @RequestParam String token, @RequestParam String platform, @RequestParam Integer sysPhone) {
+        return userService.wxBindMobile(phone, code, wxOpenId, token, platform, sysPhone);
+    }
+
+    @GetMapping("/wxOpenIdLogin")
+    @ApiOperation("公众号openId登录")
+    public Result wxOpenIdLogin(String openId, Integer userType) {
+        return userService.wxOpenIdLogin(openId, userType);
+    }
+
+    @ApiOperation("用户端openid登录")
+    @RequestMapping(value = "/openid/login", method = RequestMethod.GET)
+    @ResponseBody
+    public Result loginByOpenId(@RequestParam String openId, @RequestParam Integer userType) {
+        return userService.loginByOpenId(openId);
+    }
+
+    @RequestMapping(value = "/registerCode", method = RequestMethod.POST)
+    @ApiOperation("app或h5注册或登录")
+    @ResponseBody
+    public Result registerCode(String phone, String msg, String platform, Integer sysPhone, String password, Integer userType, String openId, String inviterCode) {
+        return userService.registerCode(phone, msg, platform, sysPhone, password, userType, openId, inviterCode);
+    }
+
+    @ApiOperation("用户端发送验证码")
+    @RequestMapping(value = "/sendMsg/{phone}/{state}", method = RequestMethod.GET)
+    @ResponseBody
+    public Result sendMsg(@PathVariable String phone, @PathVariable String state) {
+        return userService.sendMsg(phone, state);
+    }
+
+    @ApiOperation("解密手机号")
+    @RequestMapping(value = "/selectPhone", method = RequestMethod.POST)
+    public Result getPhoneNumberBeanS5(@RequestBody WxPhone wxPhone) {
+        return UserConstantInterface.decryptS5(wxPhone.getDecryptData(), wxPhone.getKey(), wxPhone.getIv());
+    }
+
+    @ApiParam("登录app")
+    @RequestMapping(value = "/loginApp", method = RequestMethod.POST)
+    public Result loginApp(@RequestParam String phone, @RequestParam String password, @RequestParam Integer userType, String accountOpenId) {
+        return userService.loginApp(phone, password, userType, accountOpenId);
+    }
+
+
+    @ApiOperation("用户端忘记密码")
+    @RequestMapping(value = "/forgetPwd", method = RequestMethod.POST)
+    @ResponseBody
+    public Result forgetPwd(String pwd, String phone, String msg) {
+        return userService.forgetPwd(pwd, phone, msg);
+    }
+
+
+    @GetMapping("/selectCity")
+    @ApiOperation("根据经纬度获取城市")
+    public Result selectCity(String lat, String lng) {
+        if (StringUtils.isNotBlank(lat) && StringUtils.isNotBlank(lng)) {
+            String way = commonInfoService.findOne(414).getValue();
+            if ("1".equals(way)) {
+                List<MessageInfo> list = messageService.list(new QueryWrapper<MessageInfo>().eq("state", 12).eq("is_see", 1).orderByAsc("title"));
+                for (MessageInfo messageInfo:list){
+                    String url = "https://apis.map.qq.com/ws/geocoder/v1/";
+                    Map<String, String> maps = new HashMap<>();
+                    maps.put("location", lat + "," + lng);
+                    maps.put("key", messageInfo.getContent());
+                    String data = HttpClientUtil.doGet(url, maps);
+                    JSONObject jsonObject = JSON.parseObject(data);
+                    String status = jsonObject.getString("status");
+                    if ("0".equals(status)) {
+                        JSONObject result = jsonObject.getJSONObject("result");
+                        JSONObject adInfo = result.getJSONObject("ad_info");
+                        JSONObject jsonObject1 = result.getJSONObject("formatted_addresses");
+                        String recommend = jsonObject1.getString("recommend");
+                        adInfo.put("address", recommend);
+                        if(StringUtils.isNotEmpty(messageInfo.getTitle())){
+                            Integer num=Integer.parseInt(messageInfo.getTitle())+1;
+                            messageInfo.setTitle(num.toString());
+                        }else{
+                            messageInfo.setTitle(String.valueOf(1));
+                        }
+                        messageService.updateById(messageInfo);
+                        return Result.success().put("data", adInfo);
+                    } else {
+                        log.error("转换失败!!!原因:" + jsonObject.getString("message"));
+                        messageInfo.setPlatform(jsonObject.getString("message"));
+                        messageInfo.setIsSee("2");
+                        messageService.updateById(messageInfo);
+                    }
+                }
+
+                return Result.error("获取定位失败!");
+            } else {
+                String value = commonInfoService.findOne(415).getValue();
+                String url = "http://api.tianditu.gov.cn/geocoder";
+                Map<String, String> param = new HashMap<>();
+                JSONObject postStr = new JSONObject();
+                postStr.put("lon", lng);
+                postStr.put("lat", lat);
+                postStr.put("ver", "1");
+                param.put("postStr", postStr.toJSONString());
+                param.put("type", "geocode");
+                param.put("tk", value);
+                String s = HttpClientUtil.doGet(url, param);
+                JSONObject jsonObject = JSONObject.parseObject(s);
+                String status = jsonObject.getString("status");
+                if ("0".equals(status)) {
+                    JSONObject result = jsonObject.getJSONObject("result");
+                    JSONObject addressComponent = result.getJSONObject("addressComponent");
+                    String province = addressComponent.getString("province");
+                    String city = addressComponent.getString("city");
+                    if (StringUtils.isEmpty(city)) {
+                        if ("新疆维吾尔自治区".equals(province) || "台湾省".equals(province)) {
+                            city = addressComponent.getString("county");
+                        } else {
+                            city = addressComponent.getString("province");
+                        }
+                    }
+                    String county = addressComponent.getString("county");
+                    JSONObject jsonObject1 = new JSONObject();
+                    jsonObject1.put("province", province);
+                    jsonObject1.put("city", city);
+                    jsonObject1.put("district", county);
+                    jsonObject1.put("address", addressComponent.getString("address"));
+                    return Result.success().put("data", jsonObject1);
+                } else {
+                    return Result.error("获取定位失败!");
+                }
+
+            }
+        } else {
+            return Result.error("位置信息获取失败");
+        }
+    }
+
+    @GetMapping("/getOpenId")
+    @ApiOperation("公众号根据code换取openId")
+    public Result getOpenId(String code) {
+        try {
+
+            CommonInfo one = commonInfoService.findOne(5);
+            CommonInfo two = commonInfoService.findOne(21);
+            SnsToken snsToken = SnsAPI.oauth2AccessToken(one.getValue(), two.getValue(), code);
+            String openid = snsToken.getOpenid();
+            return Result.success().put("data", openid);
+        } catch (Exception e) {
+            throw new RuntimeException("GET_OPENID_FAIL");
+        }
+
+    }
+
+    @GetMapping("/getRiderOpenId")
+    @ApiOperation("公众号根据code换取openId")
+    public Result getRiderOpenId(String code) {
+        try {
+            CommonInfo one = commonInfoService.findOne(262);
+            CommonInfo two = commonInfoService.findOne(263);
+            SnsToken snsToken = SnsAPI.oauth2AccessToken(one.getValue(), two.getValue(), code);
+            String openid = snsToken.getOpenid();
+            return Result.success().put("data", openid);
+        } catch (Exception e) {
+            throw new RuntimeException("GET_OPENID_FAIL");
+        }
+
+    }
+
+
+    @GetMapping("/bindOpenId")
+    @ApiOperation("用户绑定公众号openId")
+    public Result bindOpenId(Long userId, String openId) {
+        UserEntity userEntity = new UserEntity();
+        userEntity.setUserId(userId);
+        userEntity.setOpenId(openId);
+        userService.updateById(userEntity);
+        return Result.success();
+    }
+
+
+}

+ 51 - 0
src/main/java/com/sqx/modules/app/controller/app/AppUserMoneyController.java

@@ -0,0 +1,51 @@
+package com.sqx.modules.app.controller.app;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.annotation.Login;
+import com.sqx.modules.app.entity.UserMoneyDetails;
+import com.sqx.modules.app.service.UserMoneyDetailsService;
+import com.sqx.modules.app.service.UserMoneyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/app/userMoney")
+@Api(value = "app 钱包", tags = {"app 钱包"})
+public class AppUserMoneyController {
+    @Autowired
+    private UserMoneyService userMoneyService;
+    @Autowired
+    private UserMoneyDetailsService userMoneyDetailsService;
+
+    @GetMapping("/selectMyMoney")
+    @Login
+    @ApiOperation("我的钱包余额")
+    public Result selectMyMoney(@RequestAttribute Long userId) {
+        return Result.success().put("data", userMoneyService.selectUserMoneyByUserId(userId));
+    }
+
+    @Login
+    @ApiOperation("钱包明细")
+    @GetMapping("/queryUserMoneyDetails")
+    public Result queryUserMoneyDetails(Integer page, Integer limit, @RequestAttribute("userId") Long userId, UserMoneyDetails userMoneyDetails) {
+        userMoneyDetails.setUserId(userId);
+        return userMoneyDetailsService.queryUserMoneyDetails(page, limit, userMoneyDetails);
+    }
+
+    @Login
+    @ApiOperation("钱包明细")
+    @GetMapping("/selectUserMoneyDetails")
+    public Result selectUserMoneyDetails(Integer page, Integer limit, @RequestAttribute("userId") Long userId,Integer classify) {
+        return userMoneyDetailsService.selectUserMoneyDetails(page, limit, userId,classify);
+    }
+
+
+}

+ 43 - 0
src/main/java/com/sqx/modules/app/controller/app/AppUserVipController.java

@@ -0,0 +1,43 @@
+package com.sqx.modules.app.controller.app;
+
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.annotation.Login;
+import com.sqx.modules.app.service.UserVipService;
+import com.sqx.modules.sys.controller.AbstractController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@Api(value = "app 用户会员信息", tags = {"app 用户会员信息"})
+@RequestMapping(value = "/app/UserVip")
+public class AppUserVipController extends AbstractController {
+    @Autowired
+    private UserVipService userVipService;
+
+    @Login
+    @GetMapping("/selectUserVip")
+    @ApiOperation("查询用户会员信息")
+    public Result selectUserVip(@RequestAttribute Long userId) {
+        return Result.success().put("data", userVipService.selectUserVipByUserId(userId));
+    }
+
+    @Login
+    @GetMapping("/isUserVip")
+    @ApiOperation("查询用户是否是会员")
+    public Result isUserVip(@RequestAttribute Long userId) {
+        return userVipService.isUserVip(userId);
+    }
+
+    @GetMapping("/getUserVip")
+    @ApiOperation("查询用户是否是会员")
+    public Result getUserVip(Long userId) {
+        return userVipService.isUserVip(userId);
+    }
+
+
+}

+ 46 - 0
src/main/java/com/sqx/modules/app/controller/app/AppVipDetailsController.java

@@ -0,0 +1,46 @@
+package com.sqx.modules.app.controller.app;
+
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.annotation.Login;
+import com.sqx.modules.app.entity.VipDetails;
+import com.sqx.modules.app.service.VipDetailsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/app/VipDetails")
+@AllArgsConstructor
+@Api("app 会员详情信息")
+public class AppVipDetailsController {
+    private VipDetailsService appVipDetailsService;
+    /**
+     * 查询会员的详情信息
+     *
+     * @return
+     */
+    @Login
+    @ApiParam("查询会员的详情信息")
+    @GetMapping("/selectVipDetails")
+    public Result selectVipDetails() {
+        return appVipDetailsService.selectVipDetails();
+    }
+
+    /**
+     * 添加会员的详情信息
+     *
+     * @return
+     */
+    @Login
+    @ApiParam("添加会员的详情信息")
+    @GetMapping("/insertVipDetails")
+    public Result insertVipDetails(VipDetails vipDetails) {
+        return appVipDetailsService.insertVipDetails(vipDetails);
+
+    }
+}
+
+

+ 20 - 0
src/main/java/com/sqx/modules/app/dao/AppDao.java

@@ -0,0 +1,20 @@
+package com.sqx.modules.app.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sqx.modules.app.entity.App;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 用户升级
+ *
+ */
+@Mapper
+public interface AppDao extends BaseMapper<App> {
+
+    List<App> selectNewApp();
+
+
+
+}

+ 20 - 0
src/main/java/com/sqx/modules/app/dao/MsgDao.java

@@ -0,0 +1,20 @@
+package com.sqx.modules.app.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sqx.modules.app.entity.Msg;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 用户
+ *
+ */
+@Mapper
+public interface MsgDao extends BaseMapper<Msg> {
+
+    Msg findByPhone(String phone);
+
+    Msg findByPhoneAndCode(String phone, String msg);
+
+
+
+}

+ 15 - 0
src/main/java/com/sqx/modules/app/dao/UserCashOutDao.java

@@ -0,0 +1,15 @@
+package com.sqx.modules.app.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sqx.modules.app.entity.UserEntity;
+import com.sqx.modules.app.entity.UserMoney;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+@Mapper
+public interface UserCashOutDao extends BaseMapper<UserEntity> {
+
+    UserMoney findBalanceById(@Param("userId") Long userId);
+
+    int updateMoney(@Param("type") int i, @Param("userId") Long userId, @Param("money") Double moneySum);
+
+}

+ 58 - 0
src/main/java/com/sqx/modules/app/dao/UserDao.java

@@ -0,0 +1,58 @@
+package com.sqx.modules.app.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sqx.modules.app.entity.UserEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户
+ */
+@Mapper
+public interface UserDao extends BaseMapper<UserEntity> {
+
+
+    IPage<UserEntity> selectUserPage(@Param("page") Page<UserEntity> page, @Param("userEntity") UserEntity userEntity);
+
+    int queryInviterCount(@Param("inviterCode") String inviterCode);
+
+    int queryUserCount(@Param("type") int type, @Param("date") String date);
+
+    Double queryPayMoney(@Param("type") int type, @Param("date") String date);
+
+    List<UserEntity> selectRiderUserByOnLineFlag(String distance, String lng, String lat);
+
+    IPage<Map<String, Object>> queryCourseOrder(Page iPage, @Param("type") int type, @Param("date") String date);
+
+    int userMessage(String date, int type);
+
+
+    IPage<Map<String, Object>> takingOrdersMessage(Page<Map<String, Object>> iPage, @Param("type") Long type, @Param("date") String date);
+
+
+    IPage<UserEntity> selectUserList(Page<UserEntity> iPage, String userName);
+
+
+    int updateCashDeposit(@Param("userId") Long userId,@Param("cashDeposit") Double cashDeposit);
+
+    void updateMoney(Integer type, Long userId, Double money);
+
+
+
+    int deleteCertification(Long userId);
+
+
+    List<UserEntity> getNearByRider(Double range, Double lng, Double lat);
+
+    int updateRateByCity(@Param("city") String city, @Param("riderRate") BigDecimal riderRate);
+
+    Integer selectUserCount(Integer flag,String time,Integer userType,Integer phone);
+
+
+}

+ 25 - 0
src/main/java/com/sqx/modules/app/dao/UserMoneyDao.java

@@ -0,0 +1,25 @@
+package com.sqx.modules.app.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sqx.modules.app.entity.UserEntity;
+import com.sqx.modules.app.entity.UserMoney;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+
+@Mapper
+public interface UserMoneyDao extends BaseMapper<UserMoney> {
+
+    void updateMayMoney(@Param("type") Integer type, @Param("userId") Long userId, @Param("money") Double money);
+
+    void updateInviteMoney(@Param("type") Integer type, @Param("userId") Long userId, @Param("money") Double money);
+
+    void updateBalance(@Param("type") Integer type, @Param("userId") Long userId, @Param("money") Double money);
+
+    int updateCashDeposit(@Param("userId") Long userId,@Param("money") BigDecimal money, @Param("type") Integer type);
+
+    IPage<UserEntity> getRiderList(@Param("pages") Page<UserEntity> pages, @Param("userEntity") UserEntity userEntity, @Param("deposit") Double deposit);
+}

+ 36 - 0
src/main/java/com/sqx/modules/app/dao/UserMoneyDetailsDao.java

@@ -0,0 +1,36 @@
+package com.sqx.modules.app.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sqx.modules.app.entity.UserMoneyDetails;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+
+@Mapper
+public interface UserMoneyDetailsDao extends BaseMapper<UserMoneyDetails> {
+
+    Double monthIncome(@Param("date") String date,@Param("userId") Long userId);
+
+    Double selectMyProfit(Long userId);
+
+    IPage<UserMoneyDetails> selectMoneyDetails(Page<UserMoneyDetails> pages, @Param("userId") Long userId);
+
+    IPage<HashMap<String, Object>> getProfitList(@Param("pages") Page<HashMap<String, Object>> pages, @Param("userId") Long userId, @Param("type") Integer type);
+
+    IPage<HashMap<String, Object>> getAgentRanking(Page<HashMap<String, Object>> pages);
+
+    IPage<UserMoneyDetails> findMoneyDetails(@Param("pages") Page<UserMoneyDetails> pages, @Param("userMoneyDetails") UserMoneyDetails userMoneyDetails);
+
+    BigDecimal deductMoneySum(String date, Integer dateType);
+
+    BigDecimal cashDepositMoney(String date, Integer dateType);
+
+    IPage<UserMoneyDetails> selectCashDeposit(Page<UserMoneyDetails> pages, String phone, Integer type, Long userId);
+
+
+
+}

+ 9 - 0
src/main/java/com/sqx/modules/app/dao/UserVipDao.java

@@ -0,0 +1,9 @@
+package com.sqx.modules.app.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sqx.modules.app.entity.UserVip;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface UserVipDao extends BaseMapper<UserVip> {
+}

+ 9 - 0
src/main/java/com/sqx/modules/app/dao/VipDetailsDao.java

@@ -0,0 +1,9 @@
+package com.sqx.modules.app.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sqx.modules.app.entity.VipDetails;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface VipDetailsDao extends BaseMapper<VipDetails> {
+}

+ 35 - 0
src/main/java/com/sqx/modules/app/entity/App.java

@@ -0,0 +1,35 @@
+package com.sqx.modules.app.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 广告位
+ */
+@Data
+@TableName("app")
+public class App implements Serializable {
+    @TableId
+    private Long id;
+    
+    private String createAt;
+    
+    private String androidWgtUrl;
+    
+    private String iosWgtUrl;
+    
+    private String wgtUrl;
+    
+    private String version;
+
+    private String iosVersion;
+    
+    private String method;
+    
+    private String des;
+
+}
+

+ 23 - 0
src/main/java/com/sqx/modules/app/entity/AppUserInfo.java

@@ -0,0 +1,23 @@
+package com.sqx.modules.app.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AppUserInfo {
+
+
+
+    private String openid;
+    private String nickname;
+    private int sex;
+    private String province;
+    private String city;
+    private String country;
+    private String headimgurl;
+    private String unionid;
+    private List<String> privilege;
+
+
+}

+ 27 - 0
src/main/java/com/sqx/modules/app/entity/Msg.java

@@ -0,0 +1,27 @@
+package com.sqx.modules.app.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author fang
+ * @date 2020/7/10
+ */
+@Data
+@TableName("msg")
+public class Msg implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId
+    private Long id;
+
+    private String code;
+
+    private String phone;
+
+
+}

+ 27 - 0
src/main/java/com/sqx/modules/app/entity/UserDetails.java

@@ -0,0 +1,27 @@
+package com.sqx.modules.app.entity;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class UserDetails {
+    /**
+     * 本月订单数量
+      */
+    private int monthlyOrderNum;
+    /**
+     * 本月充值金额
+     */
+    private BigDecimal monthlyRechargeMoney;
+    /**
+     *本月提现数量
+     */
+    private int monthWithdrawalNum;
+    /**
+     * 本月提现金额
+     */
+    private  BigDecimal monthlyWithdrawalMoney;
+
+
+}

+ 237 - 0
src/main/java/com/sqx/modules/app/entity/UserEntity.java

@@ -0,0 +1,237 @@
+package com.sqx.modules.app.entity;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.Timestamp;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+
+/**
+ * 用户
+ */
+@Data
+@ApiModel("用户")
+@TableName("tb_user")
+public class UserEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户ID
+     */
+    @ApiModelProperty("用户id")
+    @TableId(type = IdType.AUTO, value = "user_id")
+    private Long userId;
+    /**
+     * 用户名
+     */
+    @ApiModelProperty("用户名")
+    @TableField("user_name")
+    private String userName;
+    /**
+     * 信用分
+     */
+    private Integer creditScore;
+    /**
+     * 手机号
+     */
+    @ApiModelProperty("手机号")
+    private String phone;
+
+    /**
+     * 头像
+     */
+    @ApiModelProperty("头像")
+    private String avatar;
+
+    /**
+     * 性别 1男 2女
+     */
+    @ApiModelProperty("性别 1男 2女")
+    private Integer sex;
+    /**
+     * 年龄
+     */
+    @ApiModelProperty("年龄")
+    private Integer age;
+
+    @ApiModelProperty("用户端App  openId")
+    private String wxOpenId;
+
+    @ApiModelProperty("师傅端App openId")
+    private String riderWxOpenId;
+
+    @ApiModelProperty("用户端公众号openId")
+    private String accountOpenId;
+
+    @ApiModelProperty("师傅端公众号openId")
+    private String riderAccountOpenId;
+
+    /**
+     * 普通用户微信小程序openId
+     */
+    @ApiModelProperty("普通用户微信小程序openId")
+    private String openId;
+
+    /**
+     * 骑手用户微信小程序openId
+     */
+    @ApiModelProperty("骑手用户微信小程序openId")
+    private String riderOpenId;
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private String createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private String updateTime;
+
+    /**
+     * 苹果id
+     */
+    @TableField("apple_id")
+    private String appleId;
+
+    /**
+     * 手机类型 1安卓 2ios
+     */
+    @TableField("sys_phone")
+    private Integer sysPhone;
+
+    /**
+     * 状态 1正常 2禁用
+     */
+    private Integer status;
+
+    /**
+     * 来源 app 小程序 公众号
+     */
+    private String platform;
+
+    /**
+     * 积分
+     */
+    private Integer jifen;
+
+    /**
+     * 邀请码
+     */
+    @TableField("invitation_code")
+    private String invitationCode;
+
+    /**
+     * 邀请人邀请码
+     */
+    @TableField("inviter_code")
+    private String inviterCode;
+    /**
+     * 邀请人的人上级
+     */
+    @TableField("inviter_inviter_code")
+    private String inviterInviterCode;
+
+    /**
+     * app消息推送
+     */
+    private String clientid;
+
+    /**
+     * 师傅app消息推送
+     */
+    private String clientRiderId;
+
+    /**
+     * 支付宝账号
+     */
+    private String zhiFuBao;
+
+    /**
+     * 支付宝名称
+     */
+    private String zhiFuBaoName;
+
+    /**
+     * 用户类型
+     */
+    @ApiModelProperty("用户类型 1用户 2司机")
+    @TableField(value = "user_type")
+    private Integer userType;
+
+    /**
+     * 昵称
+     */
+    @ApiModelProperty("昵称")
+    @TableField(value = "nick_name")
+    private String nickName;
+    /**
+     * 保证金
+     */
+    @ApiModelProperty("保证金")
+    @TableField(value = "cash_deposit")
+    private BigDecimal cashDeposit;
+
+    /**
+     * 账户余额
+     */
+    @ApiModelProperty("账户余额")
+    private BigDecimal balance;
+
+    /**
+     * 该用户是否是新用户 1:是新用户  2:不是新用户
+     */
+    @ApiModelProperty("该用户是否是新用户 1:是新用户  2:不是新用户")
+    @TableField(value = "new_user_flag")
+    private Integer newUserFlag;
+
+    @ApiModelProperty("用户提现二维码")
+    @TableField(value = "cash_qr_code")
+    private String cashQrCode;
+
+    @ApiModelProperty("是否推送消息")
+    private Integer isSendMsg;
+
+    private String msg;
+
+    @ApiModelProperty("抽佣比例")
+    private String rate;
+
+    @ApiModelProperty("下级抽佣比例")
+    private String divideScale;
+
+    @ApiModelProperty("二级抽佣比例")
+    private String divideTwoScale;
+
+    @TableField(exist = false)
+    private BigDecimal riderLine;
+
+    @TableField(exist = false)
+    private String search;
+
+    @TableField(exist = false)
+    private Integer isVip;
+
+    @TableField(exist = false)
+    private String endTime;
+
+}

+ 52 - 0
src/main/java/com/sqx/modules/app/entity/UserMoney.java

@@ -0,0 +1,52 @@
+package com.sqx.modules.app.entity;
+
+import com.alipay.api.domain.Money;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("user_money")
+@ApiModel("用户钱包")
+public class UserMoney implements Serializable {
+    /**
+     * 主键id
+     */
+    @ApiModelProperty("主键id")
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 钱包金额
+     */
+    @ApiModelProperty("钱包金额")
+    private BigDecimal money;
+
+    /**
+     * 推广收益
+     */
+    @ApiModelProperty("推广收益")
+    private BigDecimal inviteMoney;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty("用户id")
+    @TableField("user_id")
+    private Long userId;
+
+    @TableField(exist = false)
+    private BigDecimal accumulateMoney;
+
+}

+ 86 - 0
src/main/java/com/sqx/modules/app/entity/UserMoneyDetails.java

@@ -0,0 +1,86 @@
+package com.sqx.modules.app.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("user_money_details")
+@ApiModel("钱包详情")
+public class UserMoneyDetails implements Serializable {
+    /**
+     * 钱包详情id
+     */
+    @ApiModelProperty("钱包详情id")
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /**
+     * 用户id
+     */
+    @TableField("user_id")
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    /**
+     * 标题
+     */
+    @ApiModelProperty("标题")
+    private String title;
+    /**
+     * 类别 1保证金 2抽佣金额 3订单 4余额充值(后续再加)
+     */
+    @ApiModelProperty("类别 1保证金 2抽佣金额 3师傅订单收益 4余额充值(后续再加) 5用户提现 6师傅提现 7用户支付订单 8会员抽佣 9退款")
+    private Integer classify;
+    /**
+     * 类型
+     */
+    @ApiModelProperty("1增加 2减少")
+    private Integer type;
+
+    /**
+     * 金额
+     */
+    @ApiModelProperty("金额")
+    private BigDecimal money;
+    /**
+     * 内容
+     */
+    @ApiModelProperty("内容")
+    private String content;
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    @ApiModelProperty("创建时间")
+    private String createTime;
+
+    @TableField(exist = false)
+    private String nickName;
+
+    @TableField(exist = false)
+    private String phone;
+
+    /**
+     * 关联id
+     */
+    private Long relationId;
+    /**
+     * 下级等级(1:一级用户 2:二级用户)
+     */
+    private Integer userLevel;
+    /**
+     * 1用户 2师傅 3代理
+     */
+    private Integer userType;
+}

+ 43 - 0
src/main/java/com/sqx/modules/app/entity/UserVip.java

@@ -0,0 +1,43 @@
+package com.sqx.modules.app.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+@Data
+public class UserVip implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 用户会员ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long vipId;
+    /**
+     * 会员类型
+     */
+    private Integer vipNameType;
+    @TableField(exist = false)
+    private VipDetails vipDetails;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 购买时间
+     */
+    private String createTime;
+    /**
+     * 到期时间
+     */
+    private String endTime;
+
+    /**
+     *是否是会员
+     */
+    private Integer  isVip;
+    public UserVip() {}
+}

+ 41 - 0
src/main/java/com/sqx/modules/app/entity/VipDetails.java

@@ -0,0 +1,41 @@
+package com.sqx.modules.app.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.sqx.modules.tbCoupon.entity.TbCoupon;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("vip_details")
+@ApiModel("会员详情")
+public class VipDetails implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("会员类型")
+    @TableField("vip_name_type")
+    private Integer vipNameType;
+
+    @ApiModelProperty("会员价格")
+    private BigDecimal money;
+
+    @ApiModelProperty("会员价格")
+    private BigDecimal oldMoney;
+
+    @TableField
+    private String vipName;
+
+}

+ 24 - 0
src/main/java/com/sqx/modules/app/form/LoginForm.java

@@ -0,0 +1,24 @@
+package com.sqx.modules.app.form;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 登录表单
+ *
+ */
+@Data
+@ApiModel(value = "登录表单")
+public class LoginForm {
+    @ApiModelProperty(value = "手机号")
+    @NotBlank(message="手机号不能为空")
+    private String mobile;
+
+    @ApiModelProperty(value = "密码")
+    @NotBlank(message="密码不能为空")
+    private String password;
+
+}

+ 24 - 0
src/main/java/com/sqx/modules/app/form/RegisterForm.java

@@ -0,0 +1,24 @@
+package com.sqx.modules.app.form;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 注册表单
+ *
+ */
+@Data
+@ApiModel(value = "注册表单")
+public class RegisterForm {
+    @ApiModelProperty(value = "手机号")
+    @NotBlank(message="手机号不能为空")
+    private String mobile;
+
+    @ApiModelProperty(value = "密码")
+    @NotBlank(message="密码不能为空")
+    private String password;
+
+}

+ 73 - 0
src/main/java/com/sqx/modules/app/interceptor/AuthorizationInterceptor.java

@@ -0,0 +1,73 @@
+package com.sqx.modules.app.interceptor;
+
+
+import com.sqx.common.exception.SqxException;
+import com.sqx.modules.app.entity.UserEntity;
+import com.sqx.modules.app.service.UserService;
+import com.sqx.modules.app.utils.JwtUtils;
+import io.jsonwebtoken.Claims;
+import com.sqx.modules.app.annotation.Login;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 权限(Token)验证
+ *
+ */
+@Component
+public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
+    @Autowired
+    private JwtUtils jwtUtils;
+    @Autowired
+    private UserService userService;
+    public static final String USER_KEY = "userId";
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+
+        response.setHeader("Access-Control-Allow-Origin", "*");
+
+        Login annotation;
+        if(handler instanceof HandlerMethod) {
+            annotation = ((HandlerMethod) handler).getMethodAnnotation(Login.class);
+        }else{
+            return true;
+        }
+
+        if(annotation == null){
+            return true;
+        }
+
+        //获取用户凭证
+        String token = request.getHeader(jwtUtils.getHeader());
+        if(StringUtils.isBlank(token)){
+            token = request.getParameter(jwtUtils.getHeader());
+        }
+
+        //凭证为空
+        if(StringUtils.isBlank(token)){
+            throw new SqxException(jwtUtils.getHeader() + "不能为空", HttpStatus.UNAUTHORIZED.value());
+        }
+
+        Claims claims = jwtUtils.getClaimByToken(token);
+        if(claims == null || jwtUtils.isTokenExpired(claims.getExpiration())){
+            throw new SqxException(jwtUtils.getHeader() + "失效,请重新登录", HttpStatus.UNAUTHORIZED.value());
+        }
+        //账号被禁用
+        UserEntity userEntity = userService.getById(claims.getSubject());
+        if (userEntity != null && userEntity.getStatus() != 1) {
+            throw new SqxException("账号已被禁用", HttpStatus.UNAUTHORIZED.value());
+        }
+        //设置userId到request里,后续根据userId,获取用户信息
+        request.setAttribute(USER_KEY, Long.parseLong(claims.getSubject()));
+
+        return true;
+    }
+}

+ 44 - 0
src/main/java/com/sqx/modules/app/resolver/LoginUserHandlerMethodArgumentResolver.java

@@ -0,0 +1,44 @@
+package com.sqx.modules.app.resolver;
+
+import com.sqx.modules.app.entity.UserEntity;
+import com.sqx.modules.app.interceptor.AuthorizationInterceptor;
+import com.sqx.modules.app.service.UserService;
+import com.sqx.modules.app.annotation.LoginUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.MethodParameter;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.support.WebDataBinderFactory;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+import org.springframework.web.method.support.ModelAndViewContainer;
+
+/**
+ * 有@LoginUser注解的方法参数,注入当前登录用户
+ *
+ */
+@Component
+public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
+    @Autowired
+    private UserService userService;
+
+    @Override
+    public boolean supportsParameter(MethodParameter parameter) {
+        return parameter.getParameterType().isAssignableFrom(UserEntity.class) && parameter.hasParameterAnnotation(LoginUser.class);
+    }
+
+    @Override
+    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
+                                  NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
+        //获取用户ID
+        Object object = request.getAttribute(AuthorizationInterceptor.USER_KEY, RequestAttributes.SCOPE_REQUEST);
+        if(object == null){
+            return null;
+        }
+
+        //获取用户信息
+        UserEntity user = userService.getById((Long)object);
+
+        return user;
+    }
+}

+ 25 - 0
src/main/java/com/sqx/modules/app/response/CourseOrderResponse.java

@@ -0,0 +1,25 @@
+package com.sqx.modules.app.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CourseOrderResponse implements Serializable {
+    /**
+     * 课程名称
+     */
+    private  String  coursename;
+    /**
+     * 售卖笔数
+     */
+    private  int  coursenum;
+    /**
+     * 售卖金额
+     */
+    private  Double coursemoney;
+}

+ 52 - 0
src/main/java/com/sqx/modules/app/response/HomeMessageResponse.java

@@ -0,0 +1,52 @@
+package com.sqx.modules.app.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 首页信息返回实体
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class HomeMessageResponse implements Serializable {
+    /**
+     * 总用户数
+     */
+    private  int totalUsers;
+    /**
+     *今日新增
+     */
+    private  int newToday;
+    /**
+     *本月新增
+      */
+    private  int newMonth;
+    /**
+     * 本年新增
+     */
+    private  int newYear;
+    /**
+     * 总收入
+     */
+    private Double totalRevenue;
+    /**
+     * 今日收入
+     */
+    private Double todayRevenue;
+    /**
+     * 本月收入
+     */
+    private Double monthRevenue;
+    /**
+     * 本年收入
+     */
+    private Double yearRevenue;
+
+}

+ 20 - 0
src/main/java/com/sqx/modules/app/response/TakingOrderResponse.java

@@ -0,0 +1,20 @@
+package com.sqx.modules.app.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class TakingOrderResponse implements Serializable {
+
+  private  int orderNumber;
+  private  String gameName;
+  private  double  payMoney;
+
+
+
+
+
+
+
+}

+ 53 - 0
src/main/java/com/sqx/modules/app/response/UserFollowResponse.java

@@ -0,0 +1,53 @@
+package com.sqx.modules.app.response;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class UserFollowResponse implements Serializable {
+
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * 用户ID
+     */
+    @ApiModelProperty("用户id")
+    private Long userId;
+    /**
+     * 用户名
+     */
+    @ApiModelProperty("用户名")
+    private String userName;
+    /**
+     * 头像
+     */
+    @ApiModelProperty("头像")
+    private String avatar;
+    /**
+     * 关注状态
+     */
+    private int status;
+    /**
+     * 时间
+     */
+    private String updateTime;
+
+    private Integer sex;
+
+    private Integer age;
+
+    /**
+     * 接单id
+     */
+    @TableField(exist = false)
+    private Long  takingId;
+
+}

+ 25 - 0
src/main/java/com/sqx/modules/app/response/UserMessageResponse.java

@@ -0,0 +1,25 @@
+package com.sqx.modules.app.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserMessageResponse implements Serializable {
+    /**
+     * 总人数
+     */
+    private int totalNumber;
+    /**
+     * 普通用户人数
+     */
+    private int userNumber;
+    /**
+     * 会员人数
+     */
+    private int vipUserNumber;
+}

+ 25 - 0
src/main/java/com/sqx/modules/app/service/AppService.java

@@ -0,0 +1,25 @@
+package com.sqx.modules.app.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.sqx.modules.app.entity.App;
+
+import java.util.List;
+
+/**
+ * 升级
+ *
+ */
+public interface AppService extends IService<App> {
+
+    App selectAppById(Long id);
+
+    int insertApp(App app);
+
+    int updateAppById(App app);
+
+    int deleteAppById(Long id);
+
+    List<App> selectNewApp();
+
+}

+ 10 - 0
src/main/java/com/sqx/modules/app/service/IAppleService.java

@@ -0,0 +1,10 @@
+package com.sqx.modules.app.service;
+
+
+import com.sqx.common.utils.Result;
+
+public interface IAppleService {
+
+        Result getAppleUserInfo(String identityToken) throws Exception;
+
+}

+ 17 - 0
src/main/java/com/sqx/modules/app/service/MsgService.java

@@ -0,0 +1,17 @@
+package com.sqx.modules.app.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.sqx.modules.app.entity.Msg;
+
+/**
+ * 验证码
+ *
+ */
+public interface MsgService extends IService<Msg> {
+
+	Msg findByPhone(String phone);
+
+	Msg findByPhoneAndCode(String phone, String msg);
+
+}

+ 23 - 0
src/main/java/com/sqx/modules/app/service/UserMoneyDetailsService.java

@@ -0,0 +1,23 @@
+package com.sqx.modules.app.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.entity.UserMoneyDetails;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.HashMap;
+
+public interface UserMoneyDetailsService extends IService<UserMoneyDetails> {
+    Result queryUserMoneyDetails(Integer page, Integer limit, UserMoneyDetails userMoneyDetails);
+
+    Result selectUserMoneyDetails(Integer page, Integer limit,Long userId, Integer classify);
+
+    Double monthIncome(String date,Long userId);
+
+    IPage<HashMap<String, Object>> getProfitList(Long userId,Integer type, Integer page, Integer limit);
+
+    Result selectCashDeposit(String phone, Integer type, Integer page, Integer limit, Long userId);
+
+}

+ 41 - 0
src/main/java/com/sqx/modules/app/service/UserMoneyService.java

@@ -0,0 +1,41 @@
+package com.sqx.modules.app.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.sqx.common.utils.PageUtils;
+import com.sqx.common.utils.Result;
+import com.sqx.modules.app.entity.UserEntity;
+import com.sqx.modules.app.entity.UserMoney;
+import com.sqx.modules.app.entity.UserMoneyDetails;
+import org.springframework.web.bind.annotation.RequestAttribute;
+
+import java.math.BigDecimal;
+
+public interface UserMoneyService extends IService<UserMoney> {
+
+    UserMoney selectUserMoneyByUserId(Long userId);
+
+    void updateMoney(int i, Long userId, double money);
+
+    void updateInviteMoney(int i, Long userId, double money);
+
+    void updateBalance(int i, Long userId, double money);
+
+    Double selectMyProfit(Long userId);
+
+    PageUtils balanceDetailed(@RequestAttribute Long userId, Page<UserMoneyDetails> ipage);
+
+    //Result profitDetailed(@RequestAttribute Long userId, IPage ipage);
+
+    Result profitDetailed(@RequestAttribute Long userId, Long page, Long limit);
+
+    Result updateCashDeposit(Long userId, BigDecimal money, Integer type);
+
+    Result updateUserMoney(Integer type, Long userId, BigDecimal money);
+
+    IPage<UserEntity> getRiderList(Integer page, Integer limit, UserEntity userEntity);
+
+
+
+}

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