diff --git a/logs/springboot-logback-error.log b/logs/springboot-logback-error.log
index eb2f046..a231582 100644
--- a/logs/springboot-logback-error.log
+++ b/logs/springboot-logback-error.log
@@ -1,65 +1,6 @@
-2025-11-25 11:02:10,187 [main] ERROR org.springframework.boot.SpringApplication:822 - Application run failed
-org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627)
- at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:607)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1321)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1160)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
- at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
- at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
- at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
- at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
- at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845)
- at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)
- at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
- at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
- at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:743)
- at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:390)
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:1214)
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:1203)
- at com.subsidy.MeishuApplication.main(MeishuApplication.java:22)
-Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
- at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622)
- ... 19 common frames omitted
-Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:593)
- at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.afterPropertiesSet(MybatisSqlSessionFactoryBean.java:429)
- at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.getObject(MybatisSqlSessionFactoryBean.java:626)
- at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration.sqlSessionFactory(MybatisPlusAutoConfiguration.java:214)
- at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41.CGLIB$sqlSessionFactory$0()
- at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41$$FastClassBySpringCGLIB$$bf8a77ff.invoke()
- at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
- at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
- at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41.sqlSessionFactory()
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- at java.lang.reflect.Method.invoke(Method.java:498)
- at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
- ... 20 common frames omitted
-Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:122)
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:94)
- at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:591)
- ... 33 common frames omitted
-Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:118)
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:262)
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:253)
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:245)
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118)
- ... 35 common frames omitted
-Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120)
- at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149)
- at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116)
- ... 39 common frames omitted
-Caused by: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:200)
- at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)
- at org.apache.ibatis.io.Resources.classForName(Resources.java:261)
- at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:116)
- ... 41 common frames omitted
+2025-12-09 13:27:21,225 [http-nio-23510-exec-6] ERROR com.show.common.exception.GlobalExceptionHandler:89 - JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token
+ at [Source: (PushbackInputStream); line: 1, column: 256] (through reference chain: com.show.dto.work.SubmitWorkDTO["works"])
+2025-12-09 13:28:27,940 [http-nio-23510-exec-7] ERROR com.show.common.exception.GlobalExceptionHandler:89 - JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token
+ at [Source: (PushbackInputStream); line: 1, column: 194] (through reference chain: com.show.dto.work.SubmitWorkDTO["works"])
+2025-12-09 13:31:19,273 [http-nio-23510-exec-4] ERROR com.show.common.exception.GlobalExceptionHandler:89 - JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token
+ at [Source: (PushbackInputStream); line: 1, column: 194] (through reference chain: com.show.dto.work.SubmitWorkDTO["works"])
diff --git a/logs/springboot-logback-info.log b/logs/springboot-logback-info.log
index a69d5bf..2107ba1 100644
--- a/logs/springboot-logback-info.log
+++ b/logs/springboot-logback-info.log
@@ -1,93 +1,378 @@
-2025-11-25 11:02:05,245 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode!
-2025-11-25 11:02:05,253 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode.
-2025-11-25 11:02:05,285 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 20ms. Found 0 repository interfaces.
-2025-11-25 11:02:05,382 [main] WARN org.mybatis.spring.mapper.ClassPathMapperScanner:44 - No MyBatis mapper was found in '[com.subsidy.mapper]' package. Please check your configuration.
-2025-11-25 11:02:05,599 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$23749ea7] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2025-11-25 11:02:05,693 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.subsidy.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$233ca9ae] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2025-11-25 11:02:06,011 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23504 (http)
-2025-11-25 11:02:06,022 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23504"]
-2025-11-25 11:02:06,029 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat]
-2025-11-25 11:02:06,029 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22]
-2025-11-25 11:02:06,035 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4].
-2025-11-25 11:02:06,035 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
-2025-11-25 11:02:06,035 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
-2025-11-25 11:02:06,037 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023]
-2025-11-25 11:02:06,173 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext
-2025-11-25 11:02:06,174 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 1695 ms
-2025-11-25 11:02:07,686 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
-2025-11-25 11:02:07,854 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor'
-2025-11-25 11:02:08,016 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource
-2025-11-25 11:02:10,005 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited
-2025-11-25 11:02:10,147 [main] WARN org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext:557 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
-2025-11-25 11:02:10,147 [main] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ...
-2025-11-25 11:02:10,150 [main] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed
-2025-11-25 11:02:10,151 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor'
-2025-11-25 11:02:10,169 [main] INFO org.apache.catalina.core.StandardService:173 - Stopping service [Tomcat]
-2025-11-25 11:02:10,178 [main] INFO org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener:136 -
+2025-12-15 09:24:48,127 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode!
+2025-12-15 09:24:48,135 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode.
+2025-12-15 09:24:48,180 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 29ms. Found 0 repository interfaces.
+2025-12-15 09:24:48,536 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$cf2efc2f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 09:24:48,643 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$82817e2a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 09:24:48,959 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http)
+2025-12-15 09:24:48,971 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"]
+2025-12-15 09:24:48,977 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat]
+2025-12-15 09:24:48,977 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22]
+2025-12-15 09:24:48,983 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4].
+2025-12-15 09:24:48,983 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
+2025-12-15 09:24:48,983 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
+2025-12-15 09:24:48,986 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023]
+2025-12-15 09:24:49,126 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext
+2025-12-15 09:24:49,127 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 2257 ms
+2025-12-15 09:24:49,225 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource
+2025-12-15 09:24:50,296 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited
+2025-12-15 09:24:53,704 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
+2025-12-15 09:24:53,913 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor'
+2025-12-15 09:24:54,930 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor
+2025-12-15 09:24:54,944 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-12-15 09:24:54,944 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created.
+2025-12-15 09:24:54,945 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized.
+2025-12-15 09:24:54,946 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) '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.
-Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
-2025-11-25 11:02:10,187 [main] ERROR org.springframework.boot.SpringApplication:822 - Application run failed
-org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627)
- at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:607)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1321)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1160)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
- at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
- at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
- at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
- at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
- at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845)
- at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)
- at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
- at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
- at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:743)
- at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:390)
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:1214)
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:1203)
- at com.subsidy.MeishuApplication.main(MeishuApplication.java:22)
-Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
- at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622)
- ... 19 common frames omitted
-Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:593)
- at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.afterPropertiesSet(MybatisSqlSessionFactoryBean.java:429)
- at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.getObject(MybatisSqlSessionFactoryBean.java:626)
- at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration.sqlSessionFactory(MybatisPlusAutoConfiguration.java:214)
- at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41.CGLIB$sqlSessionFactory$0()
- at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41$$FastClassBySpringCGLIB$$bf8a77ff.invoke()
- at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
- at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
- at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$613d0b41.sqlSessionFactory()
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- at java.lang.reflect.Method.invoke(Method.java:498)
- at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
- ... 20 common frames omitted
-Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\code\show\target\classes\mapper\AdministerMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:122)
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:94)
- at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:591)
- ... 33 common frames omitted
-Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:118)
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:262)
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:253)
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:245)
- at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118)
- ... 35 common frames omitted
-Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.subsidy.model.AdministerDO'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120)
- at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149)
- at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116)
- ... 39 common frames omitted
-Caused by: java.lang.ClassNotFoundException: Cannot find class: com.subsidy.model.AdministerDO
- at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:200)
- at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)
- at org.apache.ibatis.io.Resources.classForName(Resources.java:261)
- at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:116)
- ... 41 common frames omitted
+2025-12-15 09:24:54,946 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-12-15 09:24:54,946 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1
+2025-12-15 09:24:54,947 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@68fc636a
+2025-12-15 09:24:54,965 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler'
+2025-12-15 09:24:55,044 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed
+2025-12-15 09:24:55,069 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s)
+2025-12-15 09:24:55,106 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references
+2025-12-15 09:24:55,339 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now
+2025-12-15 09:24:55,340 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-12-15 09:24:55,351 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"]
+2025-12-15 09:24:55,383 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path ''
+2025-12-15 09:45:41,621 [http-nio-23510-exec-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-12-15 09:45:41,621 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet'
+2025-12-15 09:45:41,630 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 9 ms
+2025-12-15 09:58:55,472 [Thread-22] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 09:58:55,472 [Thread-22] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler'
+2025-12-15 09:58:55,473 [Thread-22] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler
+2025-12-15 09:58:55,473 [Thread-22] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2025-12-15 09:58:55,473 [Thread-22] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 09:58:55,473 [Thread-22] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2025-12-15 09:58:55,478 [Thread-22] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor'
+2025-12-15 09:58:55,496 [Thread-22] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ...
+2025-12-15 09:58:55,498 [Thread-22] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed
+2025-12-15 09:59:13,240 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode!
+2025-12-15 09:59:13,244 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode.
+2025-12-15 09:59:13,287 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 29ms. Found 0 repository interfaces.
+2025-12-15 09:59:13,651 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$298240fe] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 09:59:13,749 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$dcd4c2f9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 09:59:14,169 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http)
+2025-12-15 09:59:14,182 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"]
+2025-12-15 09:59:14,190 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat]
+2025-12-15 09:59:14,191 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22]
+2025-12-15 09:59:14,197 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4].
+2025-12-15 09:59:14,197 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
+2025-12-15 09:59:14,197 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
+2025-12-15 09:59:14,200 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023]
+2025-12-15 09:59:14,349 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext
+2025-12-15 09:59:14,349 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 2039 ms
+2025-12-15 09:59:14,463 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource
+2025-12-15 09:59:15,659 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited
+2025-12-15 09:59:18,655 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
+2025-12-15 09:59:18,819 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor'
+2025-12-15 09:59:19,530 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor
+2025-12-15 09:59:19,540 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-12-15 09:59:19,541 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created.
+2025-12-15 09:59:19,542 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized.
+2025-12-15 09:59:19,542 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) '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-12-15 09:59:19,543 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-12-15 09:59:19,543 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1
+2025-12-15 09:59:19,543 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@18301763
+2025-12-15 09:59:19,558 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler'
+2025-12-15 09:59:19,621 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed
+2025-12-15 09:59:19,639 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s)
+2025-12-15 09:59:19,671 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references
+2025-12-15 09:59:19,866 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now
+2025-12-15 09:59:19,867 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-12-15 09:59:19,877 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"]
+2025-12-15 09:59:19,898 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path ''
+2025-12-15 09:59:20,116 [http-nio-23510-exec-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-12-15 09:59:20,116 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet'
+2025-12-15 09:59:20,123 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 7 ms
+2025-12-15 10:24:46,373 [Thread-19] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 10:24:46,391 [Thread-19] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler'
+2025-12-15 10:24:46,397 [Thread-19] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler
+2025-12-15 10:24:46,398 [Thread-19] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2025-12-15 10:24:46,398 [Thread-19] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 10:24:46,399 [Thread-19] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2025-12-15 10:24:46,446 [Thread-19] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor'
+2025-12-15 10:24:46,515 [Thread-19] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ...
+2025-12-15 10:24:46,542 [Thread-19] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed
+2025-12-15 10:24:54,840 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode!
+2025-12-15 10:24:54,844 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode.
+2025-12-15 10:24:54,885 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 27ms. Found 0 repository interfaces.
+2025-12-15 10:24:55,233 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$ae588d75] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 10:24:55,333 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$61ab0f70] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 10:24:55,653 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http)
+2025-12-15 10:24:55,666 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"]
+2025-12-15 10:24:55,673 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat]
+2025-12-15 10:24:55,673 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22]
+2025-12-15 10:24:55,678 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4].
+2025-12-15 10:24:55,678 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
+2025-12-15 10:24:55,678 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
+2025-12-15 10:24:55,681 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023]
+2025-12-15 10:24:55,819 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext
+2025-12-15 10:24:55,820 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 1933 ms
+2025-12-15 10:24:55,920 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource
+2025-12-15 10:24:57,255 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited
+2025-12-15 10:25:00,524 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
+2025-12-15 10:25:00,698 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor'
+2025-12-15 10:25:01,549 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor
+2025-12-15 10:25:01,560 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-12-15 10:25:01,560 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created.
+2025-12-15 10:25:01,561 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized.
+2025-12-15 10:25:01,562 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) '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-12-15 10:25:01,562 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-12-15 10:25:01,562 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1
+2025-12-15 10:25:01,563 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@655f92a1
+2025-12-15 10:25:01,579 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler'
+2025-12-15 10:25:01,646 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed
+2025-12-15 10:25:01,669 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s)
+2025-12-15 10:25:01,702 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references
+2025-12-15 10:25:01,924 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now
+2025-12-15 10:25:01,925 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-12-15 10:25:01,936 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"]
+2025-12-15 10:25:01,966 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path ''
+2025-12-15 10:25:44,669 [http-nio-23510-exec-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-12-15 10:25:44,669 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet'
+2025-12-15 10:25:44,678 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 9 ms
+2025-12-15 10:26:13,976 [Thread-21] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 10:26:13,977 [Thread-21] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler'
+2025-12-15 10:26:13,977 [Thread-21] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler
+2025-12-15 10:26:13,977 [Thread-21] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2025-12-15 10:26:13,977 [Thread-21] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 10:26:13,978 [Thread-21] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2025-12-15 10:26:13,984 [Thread-21] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor'
+2025-12-15 10:26:14,000 [Thread-21] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ...
+2025-12-15 10:26:14,003 [Thread-21] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed
+2025-12-15 10:26:20,045 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode!
+2025-12-15 10:26:20,050 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode.
+2025-12-15 10:26:20,090 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 28ms. Found 0 repository interfaces.
+2025-12-15 10:26:20,437 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$6775700f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 10:26:20,533 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$1ac7f20a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 10:26:20,860 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http)
+2025-12-15 10:26:20,872 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"]
+2025-12-15 10:26:20,879 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat]
+2025-12-15 10:26:20,879 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22]
+2025-12-15 10:26:20,884 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4].
+2025-12-15 10:26:20,884 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
+2025-12-15 10:26:20,884 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
+2025-12-15 10:26:20,887 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023]
+2025-12-15 10:26:21,037 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext
+2025-12-15 10:26:21,037 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 1898 ms
+2025-12-15 10:26:21,140 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource
+2025-12-15 10:26:22,307 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited
+2025-12-15 10:26:25,514 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
+2025-12-15 10:26:25,684 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor'
+2025-12-15 10:26:26,447 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor
+2025-12-15 10:26:26,457 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-12-15 10:26:26,457 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created.
+2025-12-15 10:26:26,458 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized.
+2025-12-15 10:26:26,459 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) '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-12-15 10:26:26,460 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-12-15 10:26:26,460 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1
+2025-12-15 10:26:26,460 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@5ec3689b
+2025-12-15 10:26:26,475 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler'
+2025-12-15 10:26:26,538 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed
+2025-12-15 10:26:26,558 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s)
+2025-12-15 10:26:26,594 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references
+2025-12-15 10:26:26,805 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now
+2025-12-15 10:26:26,806 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-12-15 10:26:26,814 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"]
+2025-12-15 10:26:26,837 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path ''
+2025-12-15 10:28:04,263 [http-nio-23510-exec-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-12-15 10:28:04,263 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet'
+2025-12-15 10:28:04,269 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 6 ms
+2025-12-15 14:20:28,824 [Thread-19] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 14:20:28,840 [Thread-19] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler'
+2025-12-15 14:20:28,845 [Thread-19] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler
+2025-12-15 14:20:28,845 [Thread-19] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2025-12-15 14:20:28,845 [Thread-19] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 14:20:28,847 [Thread-19] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2025-12-15 14:20:28,895 [Thread-19] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor'
+2025-12-15 14:20:28,982 [Thread-19] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ...
+2025-12-15 14:20:28,990 [Thread-19] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed
+2025-12-15 14:20:37,155 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode!
+2025-12-15 14:20:37,162 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode.
+2025-12-15 14:20:37,220 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 37ms. Found 0 repository interfaces.
+2025-12-15 14:20:37,681 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$43e98983] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 14:20:37,813 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$f73c0b7e] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 14:20:38,199 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http)
+2025-12-15 14:20:38,215 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"]
+2025-12-15 14:20:38,223 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat]
+2025-12-15 14:20:38,223 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22]
+2025-12-15 14:20:38,230 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4].
+2025-12-15 14:20:38,230 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
+2025-12-15 14:20:38,230 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
+2025-12-15 14:20:38,234 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023]
+2025-12-15 14:20:38,384 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext
+2025-12-15 14:20:38,384 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 2482 ms
+2025-12-15 14:20:38,513 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource
+2025-12-15 14:20:39,647 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited
+2025-12-15 14:20:42,926 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
+2025-12-15 14:20:43,109 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor'
+2025-12-15 14:20:43,931 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor
+2025-12-15 14:20:43,944 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-12-15 14:20:43,944 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created.
+2025-12-15 14:20:43,945 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized.
+2025-12-15 14:20:43,945 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) '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-12-15 14:20:43,946 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-12-15 14:20:43,946 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1
+2025-12-15 14:20:43,946 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@1b53e6fc
+2025-12-15 14:20:43,961 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler'
+2025-12-15 14:20:44,027 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed
+2025-12-15 14:20:44,045 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s)
+2025-12-15 14:20:44,077 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references
+2025-12-15 14:20:44,296 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now
+2025-12-15 14:20:44,296 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-12-15 14:20:44,305 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"]
+2025-12-15 14:20:44,333 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path ''
+2025-12-15 14:25:25,108 [http-nio-23510-exec-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-12-15 14:25:25,108 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet'
+2025-12-15 14:25:25,115 [http-nio-23510-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 7 ms
+2025-12-15 15:25:02,670 [Thread-22] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 15:25:02,674 [Thread-22] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler'
+2025-12-15 15:25:02,678 [Thread-22] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler
+2025-12-15 15:25:02,678 [Thread-22] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2025-12-15 15:25:02,678 [Thread-22] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 15:25:02,679 [Thread-22] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2025-12-15 15:25:02,701 [Thread-22] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor'
+2025-12-15 15:25:02,863 [Thread-22] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ...
+2025-12-15 15:25:02,899 [Thread-22] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed
+2025-12-15 15:25:10,181 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode!
+2025-12-15 15:25:10,186 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode.
+2025-12-15 15:25:10,227 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 30ms. Found 0 repository interfaces.
+2025-12-15 15:25:10,621 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$890f06eb] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 15:25:10,723 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$3c6188e6] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 15:25:11,136 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http)
+2025-12-15 15:25:11,151 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"]
+2025-12-15 15:25:11,160 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat]
+2025-12-15 15:25:11,161 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22]
+2025-12-15 15:25:11,168 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4].
+2025-12-15 15:25:11,168 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
+2025-12-15 15:25:11,168 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
+2025-12-15 15:25:11,172 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023]
+2025-12-15 15:25:11,347 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext
+2025-12-15 15:25:11,347 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 2200 ms
+2025-12-15 15:25:11,481 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource
+2025-12-15 15:25:12,659 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited
+2025-12-15 15:25:16,027 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
+2025-12-15 15:25:16,233 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor'
+2025-12-15 15:25:16,980 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor
+2025-12-15 15:25:16,991 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-12-15 15:25:16,991 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created.
+2025-12-15 15:25:16,992 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized.
+2025-12-15 15:25:16,993 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) '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-12-15 15:25:16,993 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-12-15 15:25:16,993 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1
+2025-12-15 15:25:16,993 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@8ad6d29
+2025-12-15 15:25:17,009 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler'
+2025-12-15 15:25:17,077 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed
+2025-12-15 15:25:17,099 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s)
+2025-12-15 15:25:17,133 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references
+2025-12-15 15:25:17,346 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now
+2025-12-15 15:25:17,346 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-12-15 15:25:17,360 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"]
+2025-12-15 15:25:17,385 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path ''
+2025-12-15 15:28:18,562 [http-nio-23510-exec-3] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-12-15 15:28:18,562 [http-nio-23510-exec-3] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet'
+2025-12-15 15:28:18,569 [http-nio-23510-exec-3] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 7 ms
+2025-12-15 15:34:56,893 [Thread-20] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 15:34:56,894 [Thread-20] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler'
+2025-12-15 15:34:56,894 [Thread-20] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler
+2025-12-15 15:34:56,894 [Thread-20] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2025-12-15 15:34:56,894 [Thread-20] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 15:34:56,895 [Thread-20] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2025-12-15 15:34:56,900 [Thread-20] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor'
+2025-12-15 15:34:56,916 [Thread-20] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ...
+2025-12-15 15:34:56,919 [Thread-20] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed
+2025-12-15 15:35:01,485 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:244 - Multiple Spring Data modules found, entering strict repository configuration mode!
+2025-12-15 15:35:01,490 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:126 - Bootstrapping Spring Data repositories in DEFAULT mode.
+2025-12-15 15:35:01,539 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate:182 - Finished Spring Data repository scanning in 33ms. Found 0 repository interfaces.
+2025-12-15 15:35:01,914 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$b3429b5a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 15:35:02,013 [main] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330 - Bean 'redisConfig' of type [com.show.common.configure.RedisConfig$$EnhancerBySpringCGLIB$$66951d55] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2025-12-15 15:35:02,349 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:90 - Tomcat initialized with port(s): 23510 (http)
+2025-12-15 15:35:02,361 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23510"]
+2025-12-15 15:35:02,368 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat]
+2025-12-15 15:35:02,368 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.22]
+2025-12-15 15:35:02,374 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - Loaded APR based Apache Tomcat Native library [1.2.37] using APR version [1.7.4].
+2025-12-15 15:35:02,374 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
+2025-12-15 15:35:02,374 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
+2025-12-15 15:35:02,377 [main] INFO org.apache.catalina.core.AprLifecycleListener:173 - OpenSSL successfully initialized [OpenSSL 1.1.1u 30 May 2023]
+2025-12-15 15:35:02,523 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext
+2025-12-15 15:35:02,523 [main] INFO org.springframework.web.context.ContextLoader:284 - Root WebApplicationContext: initialization completed in 1964 ms
+2025-12-15 15:35:02,625 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource
+2025-12-15 15:35:03,829 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited
+2025-12-15 15:35:07,101 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
+2025-12-15 15:35:07,329 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:171 - Initializing ExecutorService 'applicationTaskExecutor'
+2025-12-15 15:35:08,163 [main] INFO org.quartz.impl.StdSchedulerFactory:1208 - Using default implementation for ThreadExecutor
+2025-12-15 15:35:08,177 [main] INFO org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2025-12-15 15:35:08,178 [main] INFO org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.1 created.
+2025-12-15 15:35:08,179 [main] INFO org.quartz.simpl.RAMJobStore:155 - RAMJobStore initialized.
+2025-12-15 15:35:08,180 [main] INFO org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.1) '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-12-15 15:35:08,180 [main] INFO org.quartz.impl.StdSchedulerFactory:1362 - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2025-12-15 15:35:08,180 [main] INFO org.quartz.impl.StdSchedulerFactory:1366 - Quartz scheduler version: 2.3.1
+2025-12-15 15:35:08,180 [main] INFO org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@38394e76
+2025-12-15 15:35:08,200 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:171 - Initializing ExecutorService 'taskScheduler'
+2025-12-15 15:35:08,291 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed
+2025-12-15 15:35:08,319 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s)
+2025-12-15 15:35:08,363 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references
+2025-12-15 15:35:08,660 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:726 - Starting Quartz Scheduler now
+2025-12-15 15:35:08,661 [main] INFO org.quartz.core.QuartzScheduler:547 - Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2025-12-15 15:35:08,671 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23510"]
+2025-12-15 15:35:08,716 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:202 - Tomcat started on port(s): 23510 (http) with context path ''
+2025-12-15 15:47:08,398 [http-nio-23510-exec-2] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-12-15 15:47:08,398 [http-nio-23510-exec-2] INFO org.springframework.web.servlet.DispatcherServlet:524 - Initializing Servlet 'dispatcherServlet'
+2025-12-15 15:47:08,404 [http-nio-23510-exec-2] INFO org.springframework.web.servlet.DispatcherServlet:546 - Completed initialization in 6 ms
+2025-12-15 15:47:48,043 [Thread-21] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 15:47:48,043 [Thread-21] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:208 - Shutting down ExecutorService 'taskScheduler'
+2025-12-15 15:47:48,043 [Thread-21] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean:844 - Shutting down Quartz Scheduler
+2025-12-15 15:47:48,043 [Thread-21] INFO org.quartz.core.QuartzScheduler:666 - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2025-12-15 15:47:48,043 [Thread-21] INFO org.quartz.core.QuartzScheduler:585 - Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2025-12-15 15:47:48,044 [Thread-21] INFO org.quartz.core.QuartzScheduler:740 - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2025-12-15 15:47:48,049 [Thread-21] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:208 - Shutting down ExecutorService 'applicationTaskExecutor'
+2025-12-15 15:47:48,066 [Thread-21] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ...
+2025-12-15 15:47:48,067 [Thread-21] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed
diff --git a/logs/springboot-logback/error/2024-08-20-0.log3632128746896100.tmp b/logs/springboot-logback/error/2024-08-20-0.log3632128746896100.tmp
index 8e61424..c35624a 100644
--- a/logs/springboot-logback/error/2024-08-20-0.log3632128746896100.tmp
+++ b/logs/springboot-logback/error/2024-08-20-0.log3632128746896100.tmp
@@ -28,7 +28,7 @@ org.springframework.jdbc.BadSqlGrammarException:
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
at com.sun.proxy.$Proxy124.getMemberList(Unknown Source)
- at com.subsidy.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:71)
+ at com.show.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:71)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 't.project_id' in 'where clause'
@@ -98,7 +98,7 @@ Caused by: org.springframework.jdbc.BadSqlGrammarException:
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
at com.sun.proxy.$Proxy124.getMemberList(Unknown Source)
- at com.subsidy.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:71)
+ at com.show.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:71)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
... 1 common frames omitted
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 't.project_id' in 'where clause'
@@ -137,7 +137,7 @@ Caused by: java.sql.SQLSyntaxErrorException: Unknown column 't.project_id' in 'w
... 20 common frames omitted
2024-08-20 14:40:05,530 [schedulerFactoryBean_Worker-1] ERROR org.quartz.core.JobRunShell:211 - Job CourseNotificationJob.QWE2024-08-工资发放-2024-08-20 14:40:00 threw an unhandled Exception:
java.lang.NullPointerException: null
- at com.subsidy.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:88)
+ at com.show.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:88)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
2024-08-20 14:40:05,531 [schedulerFactoryBean_Worker-1] ERROR org.quartz.core.ErrorLogger:2407 - Job (CourseNotificationJob.QWE2024-08-工资发放-2024-08-20 14:40:00 threw an exception.
@@ -145,6 +145,6 @@ org.quartz.SchedulerException: Job threw an unhandled exception.
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: java.lang.NullPointerException: null
- at com.subsidy.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:88)
+ at com.show.job.ProjectSalaryNotificationJob.execute(ProjectSalaryNotificationJob.java:88)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
... 1 common frames omitted
diff --git a/logs/springboot-logback/info/2025-10-28-0.log.gz b/logs/springboot-logback/info/2025-10-28-0.log.gz
deleted file mode 100644
index 3bc0198..0000000
Binary files a/logs/springboot-logback/info/2025-10-28-0.log.gz and /dev/null differ
diff --git a/logs/springboot-logback/info/2025-10-29-0.log.gz b/logs/springboot-logback/info/2025-10-29-0.log.gz
deleted file mode 100644
index bc6ccae..0000000
Binary files a/logs/springboot-logback/info/2025-10-29-0.log.gz and /dev/null differ
diff --git a/logs/springboot-logback/info/2025-10-30-0.log.gz b/logs/springboot-logback/info/2025-10-30-0.log.gz
deleted file mode 100644
index 6e2916b..0000000
Binary files a/logs/springboot-logback/info/2025-10-30-0.log.gz and /dev/null differ
diff --git a/logs/springboot-logback/info/2025-10-31-0.log.gz b/logs/springboot-logback/info/2025-10-31-0.log.gz
deleted file mode 100644
index b466a0a..0000000
Binary files a/logs/springboot-logback/info/2025-10-31-0.log.gz and /dev/null differ
diff --git a/logs/springboot-logback/info/2025-11-03-0.log.gz b/logs/springboot-logback/info/2025-11-03-0.log.gz
deleted file mode 100644
index 0378164..0000000
Binary files a/logs/springboot-logback/info/2025-11-03-0.log.gz and /dev/null differ
diff --git a/logs/springboot-logback/info/2025-11-04-0.log.gz b/logs/springboot-logback/info/2025-11-04-0.log.gz
deleted file mode 100644
index bb316c6..0000000
Binary files a/logs/springboot-logback/info/2025-11-04-0.log.gz and /dev/null differ
diff --git a/logs/springboot-logback/info/2025-11-05-0.log.gz b/logs/springboot-logback/info/2025-11-05-0.log.gz
deleted file mode 100644
index 6a12bff..0000000
Binary files a/logs/springboot-logback/info/2025-11-05-0.log.gz and /dev/null differ
diff --git a/logs/springboot-logback/info/2025-11-06-0.log.gz b/logs/springboot-logback/info/2025-11-06-0.log.gz
deleted file mode 100644
index 453f43f..0000000
Binary files a/logs/springboot-logback/info/2025-11-06-0.log.gz and /dev/null differ
diff --git a/pom.xml b/pom.xml
index ae7935c..88d5bbb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -275,7 +275,7 @@
- ecnutracks
+ show
org.springframework.boot
diff --git a/src/main/java/com/subsidy/MeishuApplication.java b/src/main/java/com/show/MeishuApplication.java
similarity index 91%
rename from src/main/java/com/subsidy/MeishuApplication.java
rename to src/main/java/com/show/MeishuApplication.java
index b984c32..e182008 100644
--- a/src/main/java/com/subsidy/MeishuApplication.java
+++ b/src/main/java/com/show/MeishuApplication.java
@@ -1,9 +1,8 @@
-package com.subsidy;
+package com.show;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@@ -11,9 +10,8 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
-@MapperScan(basePackages = {"com.subsidy.mapper"})
+@MapperScan(basePackages = {"com.show.mapper"})
@EnableScheduling
-//@EnableCaching
@EnableAsync
@EnableTransactionManagement
public class MeishuApplication {
diff --git a/src/main/java/com/subsidy/common/ResponseData.java b/src/main/java/com/show/common/ResponseData.java
similarity index 96%
rename from src/main/java/com/subsidy/common/ResponseData.java
rename to src/main/java/com/show/common/ResponseData.java
index fd45218..6839e40 100644
--- a/src/main/java/com/subsidy/common/ResponseData.java
+++ b/src/main/java/com/show/common/ResponseData.java
@@ -1,6 +1,6 @@
-package com.subsidy.common;
+package com.show.common;
-import com.subsidy.common.configure.RemoteProperties;
+import com.show.common.configure.RemoteProperties;
import lombok.Data;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
diff --git a/src/main/java/com/subsidy/common/ResponseVO.java b/src/main/java/com/show/common/ResponseVO.java
similarity index 93%
rename from src/main/java/com/subsidy/common/ResponseVO.java
rename to src/main/java/com/show/common/ResponseVO.java
index afaa676..edca9ad 100644
--- a/src/main/java/com/subsidy/common/ResponseVO.java
+++ b/src/main/java/com/show/common/ResponseVO.java
@@ -1,4 +1,4 @@
-package com.subsidy.common;
+package com.show.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/src/main/java/com/subsidy/common/configure/AliyunSmsProperties.java b/src/main/java/com/show/common/configure/AliyunSmsProperties.java
similarity index 94%
rename from src/main/java/com/subsidy/common/configure/AliyunSmsProperties.java
rename to src/main/java/com/show/common/configure/AliyunSmsProperties.java
index 6e26e1e..0f05f79 100644
--- a/src/main/java/com/subsidy/common/configure/AliyunSmsProperties.java
+++ b/src/main/java/com/show/common/configure/AliyunSmsProperties.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
diff --git a/src/main/java/com/subsidy/common/configure/MyTomcat.java b/src/main/java/com/show/common/configure/MyTomcat.java
similarity index 98%
rename from src/main/java/com/subsidy/common/configure/MyTomcat.java
rename to src/main/java/com/show/common/configure/MyTomcat.java
index 52d1ac7..08de92a 100644
--- a/src/main/java/com/subsidy/common/configure/MyTomcat.java
+++ b/src/main/java/com/show/common/configure/MyTomcat.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
diff --git a/src/main/java/com/subsidy/common/configure/MybatisPlusConfig.java b/src/main/java/com/show/common/configure/MybatisPlusConfig.java
similarity index 96%
rename from src/main/java/com/subsidy/common/configure/MybatisPlusConfig.java
rename to src/main/java/com/show/common/configure/MybatisPlusConfig.java
index c02a5b2..5652454 100644
--- a/src/main/java/com/subsidy/common/configure/MybatisPlusConfig.java
+++ b/src/main/java/com/show/common/configure/MybatisPlusConfig.java
@@ -1,9 +1,9 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
-import com.subsidy.common.handler.MetaHandler;
+import com.show.common.handler.MetaHandler;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/src/main/java/com/subsidy/common/configure/PolyvConfig.java b/src/main/java/com/show/common/configure/PolyvConfig.java
similarity index 92%
rename from src/main/java/com/subsidy/common/configure/PolyvConfig.java
rename to src/main/java/com/show/common/configure/PolyvConfig.java
index 8082d40..97c0915 100644
--- a/src/main/java/com/subsidy/common/configure/PolyvConfig.java
+++ b/src/main/java/com/show/common/configure/PolyvConfig.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
diff --git a/src/main/java/com/subsidy/common/configure/QXueYouConfig.java b/src/main/java/com/show/common/configure/QXueYouConfig.java
similarity index 91%
rename from src/main/java/com/subsidy/common/configure/QXueYouConfig.java
rename to src/main/java/com/show/common/configure/QXueYouConfig.java
index 0bf6873..fe1a13c 100644
--- a/src/main/java/com/subsidy/common/configure/QXueYouConfig.java
+++ b/src/main/java/com/show/common/configure/QXueYouConfig.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
diff --git a/src/main/java/com/subsidy/common/configure/RedisConfig.java b/src/main/java/com/show/common/configure/RedisConfig.java
similarity index 99%
rename from src/main/java/com/subsidy/common/configure/RedisConfig.java
rename to src/main/java/com/show/common/configure/RedisConfig.java
index 63cf2de..03eb735 100644
--- a/src/main/java/com/subsidy/common/configure/RedisConfig.java
+++ b/src/main/java/com/show/common/configure/RedisConfig.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
diff --git a/src/main/java/com/subsidy/common/configure/RemoteProperties.java b/src/main/java/com/show/common/configure/RemoteProperties.java
similarity index 96%
rename from src/main/java/com/subsidy/common/configure/RemoteProperties.java
rename to src/main/java/com/show/common/configure/RemoteProperties.java
index 23a42de..0f240cb 100644
--- a/src/main/java/com/subsidy/common/configure/RemoteProperties.java
+++ b/src/main/java/com/show/common/configure/RemoteProperties.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
diff --git a/src/main/java/com/subsidy/common/configure/RenSheConfig.java b/src/main/java/com/show/common/configure/RenSheConfig.java
similarity index 93%
rename from src/main/java/com/subsidy/common/configure/RenSheConfig.java
rename to src/main/java/com/show/common/configure/RenSheConfig.java
index 65e7680..ce9d927 100644
--- a/src/main/java/com/subsidy/common/configure/RenSheConfig.java
+++ b/src/main/java/com/show/common/configure/RenSheConfig.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
diff --git a/src/main/java/com/subsidy/common/configure/RestTemplateConfig.java b/src/main/java/com/show/common/configure/RestTemplateConfig.java
similarity index 96%
rename from src/main/java/com/subsidy/common/configure/RestTemplateConfig.java
rename to src/main/java/com/show/common/configure/RestTemplateConfig.java
index c4f692f..cd3b9ed 100644
--- a/src/main/java/com/subsidy/common/configure/RestTemplateConfig.java
+++ b/src/main/java/com/show/common/configure/RestTemplateConfig.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import org.springframework.context.annotation.Bean;
import org.springframework.http.MediaType;
diff --git a/src/main/java/com/subsidy/common/configure/SubsidyConfig.java b/src/main/java/com/show/common/configure/SubsidyConfig.java
similarity index 91%
rename from src/main/java/com/subsidy/common/configure/SubsidyConfig.java
rename to src/main/java/com/show/common/configure/SubsidyConfig.java
index 18d8cbf..bdd4334 100644
--- a/src/main/java/com/subsidy/common/configure/SubsidyConfig.java
+++ b/src/main/java/com/show/common/configure/SubsidyConfig.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
diff --git a/src/main/java/com/subsidy/common/configure/SwaggerConfig.java b/src/main/java/com/show/common/configure/SwaggerConfig.java
similarity index 90%
rename from src/main/java/com/subsidy/common/configure/SwaggerConfig.java
rename to src/main/java/com/show/common/configure/SwaggerConfig.java
index fd0d2e0..5df2b75 100644
--- a/src/main/java/com/subsidy/common/configure/SwaggerConfig.java
+++ b/src/main/java/com/show/common/configure/SwaggerConfig.java
@@ -1,9 +1,8 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
@@ -29,10 +28,10 @@ public class SwaggerConfig {
.enable(!isProd)
.pathMapping("/")
.select()
- .apis(RequestHandlerSelectors.basePackage("com.subsidy"))
+ .apis(RequestHandlerSelectors.basePackage("com.show"))
.paths(PathSelectors.any())
.build().apiInfo(new ApiInfoBuilder()
- .title("ecnu")
+ .title("共创展厅")
.description("接口文档规范")
.version("1.0")
// .contact(new Contact("啊啊啊啊","www.youkehulian.com","tcp@meishu.com"))
diff --git a/src/main/java/com/subsidy/common/configure/VODConfig.java b/src/main/java/com/show/common/configure/VODConfig.java
similarity index 94%
rename from src/main/java/com/subsidy/common/configure/VODConfig.java
rename to src/main/java/com/show/common/configure/VODConfig.java
index b27c94c..5b12de5 100644
--- a/src/main/java/com/subsidy/common/configure/VODConfig.java
+++ b/src/main/java/com/show/common/configure/VODConfig.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
diff --git a/src/main/java/com/subsidy/common/configure/WebConfig.java b/src/main/java/com/show/common/configure/WebConfig.java
similarity index 97%
rename from src/main/java/com/subsidy/common/configure/WebConfig.java
rename to src/main/java/com/show/common/configure/WebConfig.java
index 07c78cd..05064ed 100644
--- a/src/main/java/com/subsidy/common/configure/WebConfig.java
+++ b/src/main/java/com/show/common/configure/WebConfig.java
@@ -1,7 +1,7 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
-import com.subsidy.common.interceptor.AuthenticationInterceptor;
+import com.show.common.interceptor.AuthenticationInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/src/main/java/com/subsidy/common/configure/WebLogAspect.java b/src/main/java/com/show/common/configure/WebLogAspect.java
similarity index 86%
rename from src/main/java/com/subsidy/common/configure/WebLogAspect.java
rename to src/main/java/com/show/common/configure/WebLogAspect.java
index ebfe688..4acf562 100644
--- a/src/main/java/com/subsidy/common/configure/WebLogAspect.java
+++ b/src/main/java/com/show/common/configure/WebLogAspect.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
@@ -6,12 +6,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import org.springframework.web.context.request.RequestAttributes;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Arrays;
@Aspect
@Component
@@ -20,10 +14,10 @@ public class WebLogAspect {
private final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
- @Pointcut("execution(public * com.subsidy.controller.*.*(..))")//切入点描述 这个是controller包的切入点
+ @Pointcut("execution(public * com.show.controller.*.*(..))")//切入点描述 这个是controller包的切入点
public void controllerLog(){}//签名,可以理解成这个切入点的一个名称
- @Pointcut("execution(public * com.subsidy.controller.*.*(..))")
+ @Pointcut("execution(public * com.show.controller.*.*(..))")
public void serviceImplLog(){}
@Before("controllerLog()") //在切入点的方法run之前要干的
diff --git a/src/main/java/com/subsidy/common/configure/WechatConfig.java b/src/main/java/com/show/common/configure/WechatConfig.java
similarity index 93%
rename from src/main/java/com/subsidy/common/configure/WechatConfig.java
rename to src/main/java/com/show/common/configure/WechatConfig.java
index bb18e0b..35f7b98 100644
--- a/src/main/java/com/subsidy/common/configure/WechatConfig.java
+++ b/src/main/java/com/show/common/configure/WechatConfig.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.configure;
+package com.show.common.configure;
import lombok.Data;
diff --git a/src/main/java/com/show/common/constant/ApplyType.java b/src/main/java/com/show/common/constant/ApplyType.java
new file mode 100644
index 0000000..2f313e7
--- /dev/null
+++ b/src/main/java/com/show/common/constant/ApplyType.java
@@ -0,0 +1,8 @@
+package com.show.common.constant;
+
+public class ApplyType {
+
+ public static final String NEW_SHOW = "新的作品";
+
+ public static final String UPDATE_SHOW = "作品更新";
+}
diff --git a/src/main/java/com/show/common/constant/AssigneeType.java b/src/main/java/com/show/common/constant/AssigneeType.java
new file mode 100644
index 0000000..629ab81
--- /dev/null
+++ b/src/main/java/com/show/common/constant/AssigneeType.java
@@ -0,0 +1,13 @@
+package com.show.common.constant;
+
+public class AssigneeType {
+
+ public static final String USER = "用户";
+
+ public static final String ROLE = "角色";
+
+ public static final String STUDENT = "学生";
+
+ public static final String TEACHER = "老师";
+
+}
diff --git a/src/main/java/com/subsidy/common/constant/AttendanceConstant.java b/src/main/java/com/show/common/constant/AttendanceConstant.java
similarity index 96%
rename from src/main/java/com/subsidy/common/constant/AttendanceConstant.java
rename to src/main/java/com/show/common/constant/AttendanceConstant.java
index 1305fc9..4a4080b 100644
--- a/src/main/java/com/subsidy/common/constant/AttendanceConstant.java
+++ b/src/main/java/com/show/common/constant/AttendanceConstant.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.constant;
+package com.show.common.constant;
public class AttendanceConstant {
diff --git a/src/main/java/com/show/common/constant/BoolFlag.java b/src/main/java/com/show/common/constant/BoolFlag.java
new file mode 100644
index 0000000..ef8ad9d
--- /dev/null
+++ b/src/main/java/com/show/common/constant/BoolFlag.java
@@ -0,0 +1,9 @@
+package com.show.common.constant;
+
+public class BoolFlag {
+
+ public static final String SHI = "是";
+
+ public static final String FOU = "否";
+
+}
diff --git a/src/main/java/com/subsidy/common/constant/Code.java b/src/main/java/com/show/common/constant/Code.java
similarity index 96%
rename from src/main/java/com/subsidy/common/constant/Code.java
rename to src/main/java/com/show/common/constant/Code.java
index fbe57a0..9dc236c 100644
--- a/src/main/java/com/subsidy/common/constant/Code.java
+++ b/src/main/java/com/show/common/constant/Code.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.constant;
+package com.show.common.constant;
import lombok.Getter;
diff --git a/src/main/java/com/show/common/constant/ConstantUtils.java b/src/main/java/com/show/common/constant/ConstantUtils.java
new file mode 100644
index 0000000..84fb329
--- /dev/null
+++ b/src/main/java/com/show/common/constant/ConstantUtils.java
@@ -0,0 +1,117 @@
+package com.show.common.constant;
+
+
+/**
+ * 枚举类
+ */
+public class ConstantUtils {
+
+ public static final String DELETE_SUCCESS = "删除成功";
+
+ public static final String UPLOAD_FAIL = "上传失败";
+
+ public static final String ADD_SUCCESS = "新增成功";
+
+ public static final String COMMIT_SUCCESS = "提交成功";
+
+ public static final String SUCCESS_SEND_OUT = "发送成功";
+
+ public static final String FAIL_SEND_OUT = "发送失败";
+
+ public static final String SAVE_SUCCESS = "保存成功";
+
+ public static final String SHARE_SUCCESS = "共享成功";
+
+ public static final String SUBMIT_SUCCESS = "提交成功";
+
+ public static final String SUCCESS_UPDATE = "更新成功";
+
+ public static final String FAIL_UPDATE = "更新失败";
+
+ public static final String SET_SUCCESS = "设置成功";
+
+ public static final String SUCCESS_VERIFY = "验证成功";
+
+ public static final String FAIL_VERIFY = "验证失败";
+
+ public static final String COMPANY_NAME = "TeachAI";
+
+ public static final String ALREADY_DONE = "已完成";
+
+ public static final String ALREADY_RECOMMEND = "已推荐";
+
+ public static final String VERIFY_NAME = "有课互联";
+
+ public static final String NOTICE_NAME = "有课进度通知";
+
+ public static final String TECH_NAME = "有课互联学习平台";
+
+
+ public static final String SUCCESS_REJECT = "驳回成功";
+
+ public static final String SUCCESS_CHECK = "审批成功";
+
+
+
+ /**
+ * 短信模板---验证模板
+ */
+ public static final String TEMPLATE_CODE = "SMS_190945394";
+
+ /**
+ * 短信 地域ID
+ */
+ public static final String REGION_ID = "cn-hangzhou";
+
+ /**
+ * 短信 RAM账号AccessKey ID
+ */
+ public static final String ACCESS_KEY_ID = "LTAI5tLUBG4B6QxhHrhddc7p";
+
+ /**
+ * 短信 RAM账号AccessKey Secret
+ */
+ public static final String SECRET = "eber38QGHZixTQ6bFfrd80kbg67jIP";
+
+ /**
+ * 腾讯云点播视频转码模板
+ */
+ public static final Long TEMPLATE_VOD = 100030L;
+
+ /**
+ * 手机端token
+ */
+ public static final String MOBILE_TERMINATE = "mobile";
+
+ public static final String ADMINISTER_TERMINATE = "administer";
+
+
+ /**
+ * API密钥--微信参数
+ */
+ public static final String SECRET_ID = "AKIDOcePHvZ2C5VeYHQGSO5aqtlNxJQLqfz2";
+
+ public static final String SECRET_KEY = "vjHYRmrfDbw0rWxA7oFcj7F8lDPKCm8E";
+
+ /**
+ * 图形验证码
+ */
+ public static final Long CAPTCHAAPP_ID = 2013197365L;
+
+ public static final String APP_SECRET_KEY = "04ABoF0ZVuMje8NP84DE5Sg**";
+
+ public static final Long BUSINESS_ID = 1L;
+
+ public static final String UTF8 = "UTF-8";
+
+ /**
+ * 保利威视
+ */
+ public static final String POLYV_VIEWLOG_2 = "http://api.polyv.net/live/v1/statistics/{channelId}/viewlog";
+
+ /**
+ * 推送人社局图片格式
+ */
+ public static final String IMAGE_FORMAT = "?x-oss-process=image/auto-orient,1/resize,m_pad,w_500,h_500/quality,Q_100/format,jpg";
+
+}
diff --git a/src/main/java/com/subsidy/common/constant/MemberType.java b/src/main/java/com/show/common/constant/MemberType.java
similarity index 83%
rename from src/main/java/com/subsidy/common/constant/MemberType.java
rename to src/main/java/com/show/common/constant/MemberType.java
index c6031a8..587bbad 100644
--- a/src/main/java/com/subsidy/common/constant/MemberType.java
+++ b/src/main/java/com/show/common/constant/MemberType.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.constant;
+package com.show.common.constant;
public class MemberType {
diff --git a/src/main/java/com/subsidy/common/constant/Platform.java b/src/main/java/com/show/common/constant/Platform.java
similarity index 95%
rename from src/main/java/com/subsidy/common/constant/Platform.java
rename to src/main/java/com/show/common/constant/Platform.java
index b1c9117..c99b660 100644
--- a/src/main/java/com/subsidy/common/constant/Platform.java
+++ b/src/main/java/com/show/common/constant/Platform.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.constant;
+package com.show.common.constant;
import lombok.Data;
diff --git a/src/main/java/com/subsidy/common/constant/Role.java b/src/main/java/com/show/common/constant/Role.java
similarity index 80%
rename from src/main/java/com/subsidy/common/constant/Role.java
rename to src/main/java/com/show/common/constant/Role.java
index 80bdc5d..71a46de 100644
--- a/src/main/java/com/subsidy/common/constant/Role.java
+++ b/src/main/java/com/show/common/constant/Role.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.constant;
+package com.show.common.constant;
public class Role {
diff --git a/src/main/java/com/subsidy/common/constant/SMSTemplate.java b/src/main/java/com/show/common/constant/SMSTemplate.java
similarity index 95%
rename from src/main/java/com/subsidy/common/constant/SMSTemplate.java
rename to src/main/java/com/show/common/constant/SMSTemplate.java
index 572f7f1..3a3ccaa 100644
--- a/src/main/java/com/subsidy/common/constant/SMSTemplate.java
+++ b/src/main/java/com/show/common/constant/SMSTemplate.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.constant;
+package com.show.common.constant;
public class SMSTemplate {
diff --git a/src/main/java/com/show/common/constant/ShowStatus.java b/src/main/java/com/show/common/constant/ShowStatus.java
new file mode 100644
index 0000000..6f3d178
--- /dev/null
+++ b/src/main/java/com/show/common/constant/ShowStatus.java
@@ -0,0 +1,9 @@
+package com.show.common.constant;
+
+public class ShowStatus {
+
+ public static final String PUBLISH = "已发布";
+
+ public static final String HIDDEN = "已隐藏";
+
+}
diff --git a/src/main/java/com/subsidy/common/constant/SmsCode.java b/src/main/java/com/show/common/constant/SmsCode.java
similarity index 90%
rename from src/main/java/com/subsidy/common/constant/SmsCode.java
rename to src/main/java/com/show/common/constant/SmsCode.java
index 23a8179..aef2e06 100644
--- a/src/main/java/com/subsidy/common/constant/SmsCode.java
+++ b/src/main/java/com/show/common/constant/SmsCode.java
@@ -1,6 +1,4 @@
-package com.subsidy.common.constant;
-
-import lombok.Getter;
+package com.show.common.constant;
public class SmsCode {
diff --git a/src/main/java/com/show/common/constant/SubmitStatus.java b/src/main/java/com/show/common/constant/SubmitStatus.java
new file mode 100644
index 0000000..7ff278a
--- /dev/null
+++ b/src/main/java/com/show/common/constant/SubmitStatus.java
@@ -0,0 +1,13 @@
+package com.show.common.constant;
+
+public class SubmitStatus {
+
+ public static final String TO_REVIEW = "待审核";
+
+ public static final String PASS = "已通过";
+
+ public static final String REJECT = "驳回中";
+
+ public static final String HIDE = "已隐藏";
+
+}
diff --git a/src/main/java/com/show/common/constant/TaskType.java b/src/main/java/com/show/common/constant/TaskType.java
new file mode 100644
index 0000000..f5f4640
--- /dev/null
+++ b/src/main/java/com/show/common/constant/TaskType.java
@@ -0,0 +1,11 @@
+package com.show.common.constant;
+
+public class TaskType {
+
+ public static final String COMMIT = "提交";
+
+ public static final String CHECK = "审批";
+
+ public static final String REJECT = "驳回";
+
+}
diff --git a/src/main/java/com/subsidy/common/constant/VodConstant.java b/src/main/java/com/show/common/constant/VodConstant.java
similarity index 95%
rename from src/main/java/com/subsidy/common/constant/VodConstant.java
rename to src/main/java/com/show/common/constant/VodConstant.java
index 12fe119..4590180 100644
--- a/src/main/java/com/subsidy/common/constant/VodConstant.java
+++ b/src/main/java/com/show/common/constant/VodConstant.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.constant;
+package com.show.common.constant;
import lombok.Getter;
diff --git a/src/main/java/com/show/common/constant/WorkflowInstanceStatus.java b/src/main/java/com/show/common/constant/WorkflowInstanceStatus.java
new file mode 100644
index 0000000..216b7ed
--- /dev/null
+++ b/src/main/java/com/show/common/constant/WorkflowInstanceStatus.java
@@ -0,0 +1,13 @@
+package com.show.common.constant;
+
+public class WorkflowInstanceStatus {
+
+ public static final String DOING = "运行中";
+
+ public static final String DONE = "已完成";
+
+ public static final String END = "已终止";
+
+ public static final String REJECTING = "驳回中";
+
+}
diff --git a/src/main/java/com/show/common/constant/WorkflowTaskStatus.java b/src/main/java/com/show/common/constant/WorkflowTaskStatus.java
new file mode 100644
index 0000000..62bcc3e
--- /dev/null
+++ b/src/main/java/com/show/common/constant/WorkflowTaskStatus.java
@@ -0,0 +1,15 @@
+package com.show.common.constant;
+
+public class WorkflowTaskStatus {
+
+ public static final String TODO = "待审核";
+
+ public static final String DONE = "已通过";
+
+ public static final String REJECT = "驳回中";
+
+ public static final String CANCEL = "已结束";
+
+ public static final String COMMIT = "已提交";
+
+}
diff --git a/src/main/java/com/subsidy/common/constant/WxConstant.java b/src/main/java/com/show/common/constant/WxConstant.java
similarity index 96%
rename from src/main/java/com/subsidy/common/constant/WxConstant.java
rename to src/main/java/com/show/common/constant/WxConstant.java
index 41ed23a..68dd509 100644
--- a/src/main/java/com/subsidy/common/constant/WxConstant.java
+++ b/src/main/java/com/show/common/constant/WxConstant.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.constant;
+package com.show.common.constant;
public class WxConstant {
diff --git a/src/main/java/com/subsidy/common/exception/GlobalExceptionHandler.java b/src/main/java/com/show/common/exception/GlobalExceptionHandler.java
similarity index 95%
rename from src/main/java/com/subsidy/common/exception/GlobalExceptionHandler.java
rename to src/main/java/com/show/common/exception/GlobalExceptionHandler.java
index 2e535e9..68ff01e 100644
--- a/src/main/java/com/subsidy/common/exception/GlobalExceptionHandler.java
+++ b/src/main/java/com/show/common/exception/GlobalExceptionHandler.java
@@ -1,10 +1,10 @@
-package com.subsidy.common.exception;
+package com.show.common.exception;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.subsidy.common.ResponseData;
-import com.subsidy.common.ResponseVO;
-import com.subsidy.common.configure.RemoteProperties;
-import com.subsidy.common.constant.Code;
+import com.show.common.ResponseData;
+import com.show.common.ResponseVO;
+import com.show.common.configure.RemoteProperties;
+import com.show.common.constant.Code;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.http.converter.HttpMessageNotReadableException;
diff --git a/src/main/java/com/subsidy/common/exception/HttpException.java b/src/main/java/com/show/common/exception/HttpException.java
similarity index 94%
rename from src/main/java/com/subsidy/common/exception/HttpException.java
rename to src/main/java/com/show/common/exception/HttpException.java
index 291188b..c78d886 100644
--- a/src/main/java/com/subsidy/common/exception/HttpException.java
+++ b/src/main/java/com/show/common/exception/HttpException.java
@@ -1,7 +1,7 @@
-package com.subsidy.common.exception;
+package com.show.common.exception;
-import com.subsidy.common.configure.RemoteProperties;
+import com.show.common.configure.RemoteProperties;
/**
* 异常处理
diff --git a/src/main/java/com/subsidy/common/handler/MetaHandler.java b/src/main/java/com/show/common/handler/MetaHandler.java
similarity index 95%
rename from src/main/java/com/subsidy/common/handler/MetaHandler.java
rename to src/main/java/com/show/common/handler/MetaHandler.java
index 9e83fcd..15905c4 100644
--- a/src/main/java/com/subsidy/common/handler/MetaHandler.java
+++ b/src/main/java/com/show/common/handler/MetaHandler.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.handler;
+package com.show.common.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
diff --git a/src/main/java/com/subsidy/common/interceptor/AuthenticationInterceptor.java b/src/main/java/com/show/common/interceptor/AuthenticationInterceptor.java
similarity index 75%
rename from src/main/java/com/subsidy/common/interceptor/AuthenticationInterceptor.java
rename to src/main/java/com/show/common/interceptor/AuthenticationInterceptor.java
index 5e37f15..6913b37 100644
--- a/src/main/java/com/subsidy/common/interceptor/AuthenticationInterceptor.java
+++ b/src/main/java/com/show/common/interceptor/AuthenticationInterceptor.java
@@ -1,13 +1,12 @@
-package com.subsidy.common.interceptor;
+package com.show.common.interceptor;
import com.auth0.jwt.interfaces.Claim;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.subsidy.common.exception.HttpException;
-import com.subsidy.mapper.AdministerMapper;
-import com.subsidy.model.AdministerDO;
-import com.subsidy.util.ConstantUtils;
-import com.subsidy.util.JwtUtil;
-import com.subsidy.util.Localstorage;
+import com.show.common.exception.HttpException;
+import com.show.mapper.MemberMapper;
+import com.show.model.MemberDO;
+import com.show.util.JwtUtil;
+import com.show.util.Localstorage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.CrossOrigin;
@@ -32,7 +31,7 @@ import java.util.Map;
public class AuthenticationInterceptor implements HandlerInterceptor {
@Autowired
- private AdministerMapper administerMapper;
+ private MemberMapper memberMapper;
@Override
@CrossOrigin()
@@ -71,37 +70,19 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
Map claimMap = JwtUtil.getClaims(token);
if (claimMap != null) {
//String[] role = methodAnnotation.value();
- String type = claimMap.get("type").asString();
- if (ConstantUtils.ADMINISTER_TERMINATE.equals(type)) {
- AdministerDO administerDO = administerMapper.selectById(claimMap.get("id").asLong());
- if (null != administerDO) {
- Localstorage.setUser(administerDO,type);
+// String type = claimMap.get("type").asString();
+// if (ConstantUtils.ADMINISTER_TERMINATE.equals(type)) {
+ MemberDO memberDO = memberMapper.selectById(claimMap.get("id").asLong());
+ if (null != memberDO) {
+ Localstorage.setUser(memberDO);
return true;
}
- } else if (ConstantUtils.MOBILE_TERMINATE.equals(type)) {
-
-
- /**
- * 学生端设置单设备登录
- */
- /* String tk = (String) redisUtil.get(ConstantUtils.MOBILE_TERMINATE+"_"+claimMap.get("id").asLong());
- if(StringUtils.isNotBlank(tk)) {
- if(tk.equals(token)) {
- return true;
- }
-
- throw new HttpException(1011);
- } else {
- throw new HttpException(1010);
- }*/
} else {
throw new HttpException(1010);
}
}
}
- throw new HttpException(1010);
+ return true;
}
- return true;
- }
}
diff --git a/src/main/java/com/subsidy/common/interceptor/LoginRequired.java b/src/main/java/com/show/common/interceptor/LoginRequired.java
similarity index 94%
rename from src/main/java/com/subsidy/common/interceptor/LoginRequired.java
rename to src/main/java/com/show/common/interceptor/LoginRequired.java
index 19e2615..91a3f10 100644
--- a/src/main/java/com/subsidy/common/interceptor/LoginRequired.java
+++ b/src/main/java/com/show/common/interceptor/LoginRequired.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.interceptor;
+package com.show.common.interceptor;
import java.lang.annotation.*;
diff --git a/src/main/java/com/subsidy/common/interceptor/TimeRequired.java b/src/main/java/com/show/common/interceptor/TimeRequired.java
similarity index 87%
rename from src/main/java/com/subsidy/common/interceptor/TimeRequired.java
rename to src/main/java/com/show/common/interceptor/TimeRequired.java
index d720289..a8b1c2f 100644
--- a/src/main/java/com/subsidy/common/interceptor/TimeRequired.java
+++ b/src/main/java/com/show/common/interceptor/TimeRequired.java
@@ -1,4 +1,4 @@
-package com.subsidy.common.interceptor;
+package com.show.common.interceptor;
import java.lang.annotation.*;
diff --git a/src/main/java/com/show/controller/AcademyDictController.java b/src/main/java/com/show/controller/AcademyDictController.java
new file mode 100644
index 0000000..0acad56
--- /dev/null
+++ b/src/main/java/com/show/controller/AcademyDictController.java
@@ -0,0 +1,40 @@
+package com.show.controller;
+
+
+import com.show.common.ResponseData;
+import com.show.common.ResponseVO;
+import com.show.model.AcademyDictDO;
+import com.show.service.AcademyDictService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.Api;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+@RestController
+@Api(tags = "院校字典表")
+@RequestMapping("/academyDict")
+public class AcademyDictController {
+
+ @Autowired
+ private AcademyDictService academyDictService;
+
+ @PostMapping("academyDetail")
+ @ApiOperation("查看院校详情 id")
+ public ResponseVO academyDetail(@RequestBody AcademyDictDO academyDictDO){
+ return ResponseData.generateCreatedResponse(0,academyDictService.academyDetail(academyDictDO));
+ }
+
+
+}
diff --git a/src/main/java/com/subsidy/controller/AdministerController.java b/src/main/java/com/show/controller/AcademyPermissionMappingController.java
similarity index 64%
rename from src/main/java/com/subsidy/controller/AdministerController.java
rename to src/main/java/com/show/controller/AcademyPermissionMappingController.java
index 8634945..7baf081 100644
--- a/src/main/java/com/subsidy/controller/AdministerController.java
+++ b/src/main/java/com/show/controller/AcademyPermissionMappingController.java
@@ -1,4 +1,4 @@
-package com.subsidy.controller;
+package com.show.controller;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -8,15 +8,15 @@ import io.swagger.annotations.Api;
/**
*
- * 管理平台用户 前端控制器
+ * 院校权限映射表 前端控制器
*
*
* @author Tuyp
- * @since 2025-11-25
+ * @since 2025-11-27
*/
@RestController
-@Api(tags = "管理平台用户")
-@RequestMapping("/administer-do")
-public class AdministerController {
+@Api(tags = "院校权限映射表")
+@RequestMapping("/academy-permission-mapping-do")
+public class AcademyPermissionMappingController {
}
diff --git a/src/main/java/com/show/controller/AcademyPlatformsController.java b/src/main/java/com/show/controller/AcademyPlatformsController.java
new file mode 100644
index 0000000..dfd4114
--- /dev/null
+++ b/src/main/java/com/show/controller/AcademyPlatformsController.java
@@ -0,0 +1,22 @@
+package com.show.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.Api;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+@RestController
+@Api(tags = "")
+@RequestMapping("/academy-platforms-do")
+public class AcademyPlatformsController {
+
+}
diff --git a/src/main/java/com/show/controller/MemberController.java b/src/main/java/com/show/controller/MemberController.java
new file mode 100644
index 0000000..bfc82a5
--- /dev/null
+++ b/src/main/java/com/show/controller/MemberController.java
@@ -0,0 +1,78 @@
+package com.show.controller;
+
+
+import com.show.common.ResponseData;
+import com.show.common.ResponseVO;
+import com.show.dto.member.MemberWorkGroupDTO;
+import com.show.dto.member.UpdateMemberInfoDTO;
+import com.show.model.MemberDO;
+import com.show.model.ShowWorksDO;
+import com.show.service.MemberService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.Api;
+
+/**
+ *
+ * 学生表 前端控制器
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@RestController
+@Api(tags = "学生表")
+@RequestMapping("/member")
+public class MemberController {
+
+ @Autowired
+ private MemberService memberService;
+
+ @PostMapping("memberPage")
+ @ApiOperation("学生首页 id 学生id")
+ public ResponseVO memberPage(@RequestBody MemberDO memberDO){
+ return ResponseData.generateCreatedResponse(0,memberService.memberPage(memberDO));
+ }
+
+ @PostMapping("login")
+ @ApiOperation("学生登录 studyNo 学号 idCard 身份证后4位 ")
+ public ResponseVO login(@RequestBody MemberDO memberDO){
+ return ResponseData.generateCreatedResponse(0,memberService.login(memberDO));
+ }
+
+ @PostMapping("activeMember")
+ @ApiOperation("激活创作者账户 id image,aliasName,telephone")
+ public ResponseVO activeMember(@RequestBody UpdateMemberInfoDTO updateMemberInfoDTO){
+ return ResponseData.generateCreatedResponse(0,memberService.activeMember(updateMemberInfoDTO));
+ }
+
+ @PostMapping("applyCenterSummary")
+ @ApiOperation("审批中心数量汇总 memberId")
+ public ResponseVO applyCenterSummary(@RequestBody ShowWorksDO showWorksDO){
+ return ResponseData.generateCreatedResponse(0,memberService.applyCenterSummary(showWorksDO));
+ }
+
+ @PostMapping("memberWorkGroup")
+ @ApiOperation("审批中心-分组 pageNum pageSize memberId applyType")
+ public ResponseVO memberWorkGroup(@RequestBody MemberWorkGroupDTO memberWorkGroupDTO){
+ return ResponseData.generateCreatedResponse(0,memberService.memberWorkGroup(memberWorkGroupDTO));
+ }
+
+ @PostMapping("updateMemberInfo")
+ @ApiOperation("修改个人信息 id image,aliasName,telephone memberContactsDOS [contactMethod imgUrl] ")
+ public ResponseVO updateMemberInfo(@RequestBody UpdateMemberInfoDTO updateMemberInfoDTO){
+ return ResponseData.generateCreatedResponse(0,memberService.updateMemberInfo(updateMemberInfoDTO));
+ }
+
+ @PostMapping("sendMsg")
+ @ApiOperation("发送短信 telephone")
+ public ResponseVO sendMsg(@RequestBody MemberDO memberDO){
+ return ResponseData.generateCreatedResponse(0,memberService.sendMsg(memberDO));
+ }
+
+}
diff --git a/src/main/java/com/show/controller/OssController.java b/src/main/java/com/show/controller/OssController.java
new file mode 100644
index 0000000..f8a592e
--- /dev/null
+++ b/src/main/java/com/show/controller/OssController.java
@@ -0,0 +1,239 @@
+package com.show.controller;
+
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.*;
+import com.show.common.ResponseData;
+import com.show.common.ResponseVO;
+import com.show.common.exception.HttpException;
+import com.show.vo.oss.GetSecretVO;
+import com.show.vo.oss.UploadFileVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+@Api(tags = "oss")
+@RestController
+@RequestMapping("/oss")
+public class OssController {
+
+ public static final String keyId = "LTAI5tLUBG4B6QxhHrhddc7p";
+
+
+ public static final String secret = "eber38QGHZixTQ6bFfrd80kbg67jIP";
+
+
+ @Value("${spring.profiles.active}")
+ private String env;
+
+ @PostMapping("getSecret")
+ @ApiOperation("oss秘钥")
+ public ResponseVO getSecret() {
+ GetSecretVO getSecretVO = new GetSecretVO();
+ getSecretVO.setKey(keyId);
+ getSecretVO.setSecret(secret);
+ return ResponseData.generateCreatedResponse(0, getSecretVO);
+ }
+
+ @PostMapping("uploadFile")
+ @ApiOperation("分片上传")
+ public ResponseVO fenpian(@RequestParam("file") MultipartFile file) {
+
+ UploadFileVO uploadFileVO = new UploadFileVO();
+
+ // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
+ String endpoint = "http://oss-cn-beijing.aliyuncs.com";
+ // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
+ // 填写Bucket名称,例如examplebucket。
+// String bucketName = "zhongzhi-cms";
+ // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
+ String objectName = System.currentTimeMillis() + "_" + file.getOriginalFilename();
+
+ // 创建OSSClient实例。
+ OSS ossClient = new OSSClientBuilder().build(endpoint, keyId, secret);
+
+ if ("dev".equals(env)) {
+ env = "ykhl-bigger-test";
+ }
+ if ("prod".equals(env)) {
+ env = "ykhl-bigger";
+ }
+
+
+ try {
+ // 创建InitiateMultipartUploadRequest对象。
+ InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(env, objectName);
+
+ // 如果需要在初始化分片时设置请求头,请参考以下示例代码。
+ ObjectMetadata metadata = new ObjectMetadata();
+ metadata.setContentType(file.getContentType());
+ metadata.setContentDisposition("inline");
+
+ metadata.setHeader("x-oss-force-download", false);
+ request.setObjectMetadata(metadata);
+
+ // 初始化分片。
+ InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
+ // 返回uploadId,它是分片上传事件的唯一标识。您可以根据该uploadId发起相关的操作,例如取消分片上传、查询分片上传等。
+ String uploadId = upresult.getUploadId();
+
+ // partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
+ List partETags = new ArrayList();
+ // 每个分片的大小,用于计算文件有多少个分片。单位为字节。
+ final long partSize = 1 * 1024 * 1024L; //1 MB。
+
+ long fileLength = file.getSize();
+ int partCount = (int) (fileLength / partSize);
+ if (fileLength % partSize != 0) {
+ partCount++;
+ }
+
+ // 遍历分片上传。
+ for (int i = 0; i < partCount; i++) {
+ long startPos = i * partSize;
+ long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
+ UploadPartRequest uploadPartRequest = new UploadPartRequest();
+ uploadPartRequest.setBucketName(env);
+ uploadPartRequest.setKey(objectName);
+ uploadPartRequest.setUploadId(uploadId);
+ // 设置上传的分片流。
+ // 以本地文件为例说明如何创建FIleInputstream,并通过InputStream.skip()方法跳过指定数据。
+ InputStream instream = file.getInputStream();
+ instream.skip(startPos);
+ uploadPartRequest.setInputStream(instream);
+ // 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
+ uploadPartRequest.setPartSize(curPartSize);
+ // 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,OSS将返回InvalidArgument错误码。
+ uploadPartRequest.setPartNumber(i + 1);
+ // 每个分片不需要按顺序上传,甚至可以在不同客户端上传,OSS会按照分片号排序组成完整的文件。
+ UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
+ // 每次上传分片之后,OSS的返回结果包含PartETag。PartETag将被保存在partETags中。
+ partETags.add(uploadPartResult.getPartETag());
+ }
+
+
+ // 创建CompleteMultipartUploadRequest对象。
+ // 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。
+ CompleteMultipartUploadRequest completeMultipartUploadRequest =
+ new CompleteMultipartUploadRequest(env, objectName, uploadId, partETags);
+
+ // 完成分片上传。
+ CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
+ uploadFileVO.setUrl(completeMultipartUploadResult.getLocation()+"?x-oss-process=image/auto-orient,1/quality,q_60");
+ } catch (Exception e) {
+ e.printStackTrace();
+// throw new HttpException();
+ } finally {
+ if (ossClient != null) {
+ ossClient.shutdown();
+ }
+ }
+
+ return ResponseData.generateCreatedResponse(0, uploadFileVO);
+ }
+
+ @PostMapping("uploadFile6")
+ @ApiOperation("分片上传 压缩至60%")
+ public ResponseVO uploadFile6(@RequestParam("file") MultipartFile file) {
+
+ UploadFileVO uploadFileVO = new UploadFileVO();
+
+ // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
+ String endpoint = "http://oss-cn-beijing.aliyuncs.com";
+ // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
+ // 填写Bucket名称,例如examplebucket。
+// String bucketName = "zhongzhi-cms";
+ // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
+ String objectName = System.currentTimeMillis() + "_" + file.getOriginalFilename();
+
+ // 创建OSSClient实例。
+ OSS ossClient = new OSSClientBuilder().build(endpoint, keyId, secret);
+
+ if ("dev".equals(env)) {
+ env = "ykhl-bigger-test";
+ }
+ if ("prod".equals(env)) {
+ env = "ykhl-bigger";
+ }
+
+
+ try {
+ // 创建InitiateMultipartUploadRequest对象。
+ InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(env, objectName);
+
+ // 如果需要在初始化分片时设置请求头,请参考以下示例代码。
+ ObjectMetadata metadata = new ObjectMetadata();
+ metadata.setContentType(file.getContentType());
+ metadata.setContentDisposition("inline");
+
+ metadata.setHeader("x-oss-force-download", false);
+ request.setObjectMetadata(metadata);
+
+ // 初始化分片。
+ InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
+ // 返回uploadId,它是分片上传事件的唯一标识。您可以根据该uploadId发起相关的操作,例如取消分片上传、查询分片上传等。
+ String uploadId = upresult.getUploadId();
+
+ // partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
+ List partETags = new ArrayList();
+ // 每个分片的大小,用于计算文件有多少个分片。单位为字节。
+ final long partSize = 1 * 1024 * 1024L; //1 MB。
+
+ long fileLength = file.getSize();
+ int partCount = (int) (fileLength / partSize);
+ if (fileLength % partSize != 0) {
+ partCount++;
+ }
+
+ // 遍历分片上传。
+ for (int i = 0; i < partCount; i++) {
+ long startPos = i * partSize;
+ long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
+ UploadPartRequest uploadPartRequest = new UploadPartRequest();
+ uploadPartRequest.setBucketName(env);
+ uploadPartRequest.setKey(objectName);
+ uploadPartRequest.setUploadId(uploadId);
+ // 设置上传的分片流。
+ // 以本地文件为例说明如何创建FIleInputstream,并通过InputStream.skip()方法跳过指定数据。
+ InputStream instream = file.getInputStream();
+ instream.skip(startPos);
+ uploadPartRequest.setInputStream(instream);
+ // 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
+ uploadPartRequest.setPartSize(curPartSize);
+ // 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,OSS将返回InvalidArgument错误码。
+ uploadPartRequest.setPartNumber(i + 1);
+ // 每个分片不需要按顺序上传,甚至可以在不同客户端上传,OSS会按照分片号排序组成完整的文件。
+ UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
+ // 每次上传分片之后,OSS的返回结果包含PartETag。PartETag将被保存在partETags中。
+ partETags.add(uploadPartResult.getPartETag());
+ }
+
+
+ // 创建CompleteMultipartUploadRequest对象。
+ // 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。
+ CompleteMultipartUploadRequest completeMultipartUploadRequest =
+ new CompleteMultipartUploadRequest(env, objectName, uploadId, partETags);
+
+ // 完成分片上传。
+ CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
+ uploadFileVO.setUrl(completeMultipartUploadResult.getLocation()+"?x-oss-process=image/auto-orient,1/quality,q_60");
+ }catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (ossClient != null) {
+ ossClient.shutdown();
+ }
+ }
+
+ return ResponseData.generateCreatedResponse(0, uploadFileVO);
+ }
+}
diff --git a/src/main/java/com/show/controller/ShowBannersController.java b/src/main/java/com/show/controller/ShowBannersController.java
new file mode 100644
index 0000000..421d48a
--- /dev/null
+++ b/src/main/java/com/show/controller/ShowBannersController.java
@@ -0,0 +1,64 @@
+package com.show.controller;
+
+
+import com.show.common.ResponseData;
+import com.show.common.ResponseVO;
+import com.show.model.ShowBannersDO;
+import com.show.service.ShowBannersService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.Api;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@RestController
+@Api(tags = "banner")
+@RequestMapping("/showBanners")
+public class ShowBannersController {
+
+ @Autowired
+ private ShowBannersService showBannersService;
+
+ @PostMapping("homePageBanners")
+ @ApiOperation("首页banner academyId")
+ public ResponseVO homePageBanners(@RequestBody ShowBannersDO showBannersDO){
+ return ResponseData.generateCreatedResponse(0,showBannersService.homePageBanners(showBannersDO));
+ }
+
+// @PostMapping("addBanner")
+// @ApiOperation("添加banner academyId bannerUrl ")
+// public ResponseVO addBanner(@RequestBody ShowBannersDO showBannersDO){
+// return ResponseData.generateCreatedResponse(0,showBannersService.addBanner(showBannersDO));
+// }
+//
+// @PostMapping("deleteBanner")
+// @ApiOperation("删除banner id")
+// public ResponseVO deleteBanner(@RequestBody ShowBannersDO showBannersDO){
+// return ResponseData.generateCreatedResponse(0,showBannersService.deleteBanner(showBannersDO));
+// }
+//
+// @PostMapping("updateBanner")
+// @ApiOperation("修改banner id bannerUrl showFlag:是/否 ")
+// public ResponseVO updateBanner(@RequestBody ShowBannersDO showBannersDO){
+// return ResponseData.generateCreatedResponse(0,showBannersService.updateBanner(showBannersDO));
+// }
+
+// @PostMapping("allBanners")
+// @ApiOperation("查看所有banner academyId ")
+// public ResponseVO allBanners(@RequestBody ShowBannersDO showBannersDO){
+// return ResponseData.generateCreatedResponse(0,showBannersService.allBanners(showBannersDO));
+// }
+
+
+}
diff --git a/src/main/java/com/show/controller/ShowLabelDictController.java b/src/main/java/com/show/controller/ShowLabelDictController.java
new file mode 100644
index 0000000..731cc70
--- /dev/null
+++ b/src/main/java/com/show/controller/ShowLabelDictController.java
@@ -0,0 +1,57 @@
+package com.show.controller;
+
+
+import com.show.common.ResponseData;
+import com.show.common.ResponseVO;
+import com.show.model.ShowLabelDictDO;
+import com.show.service.ShowLabelDictService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.Api;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@RestController
+@Api(tags = "标签")
+@RequestMapping("/showLabelDict")
+public class ShowLabelDictController {
+
+ @Autowired
+ private ShowLabelDictService showLabelDictService;
+
+// @PostMapping("addLabel")
+// @ApiOperation("新建标签 academyId label ")
+// public ResponseVO addLabel(@RequestBody ShowLabelDictDO showLabelDictDO){
+// return ResponseData.generateCreatedResponse(0,showLabelDictService.addLabel(showLabelDictDO));
+// }
+
+ @PostMapping("labels")
+ @ApiOperation("查看所有标签 academyId label ")
+ public ResponseVO labels(@RequestBody ShowLabelDictDO showLabelDictDO){
+ return ResponseData.generateCreatedResponse(0,showLabelDictService.labels(showLabelDictDO));
+ }
+
+// @PostMapping("deleteLabel")
+// @ApiOperation("删除标签 id ")
+// public ResponseVO deleteLabel(@RequestBody ShowLabelDictDO showLabelDictDO){
+// return ResponseData.generateCreatedResponse(0,showLabelDictService.deleteLabel(showLabelDictDO));
+// }
+//
+// @PostMapping("updateLabel")
+// @ApiOperation("编辑标签 id label")
+// public ResponseVO updateLabel(@RequestBody ShowLabelDictDO showLabelDictDO){
+// return ResponseData.generateCreatedResponse(0,showLabelDictService.updateLabel(showLabelDictDO));
+// }
+
+}
diff --git a/src/main/java/com/show/controller/ShowMemberContactsController.java b/src/main/java/com/show/controller/ShowMemberContactsController.java
new file mode 100644
index 0000000..949c1d9
--- /dev/null
+++ b/src/main/java/com/show/controller/ShowMemberContactsController.java
@@ -0,0 +1,57 @@
+package com.show.controller;
+
+
+import com.show.common.ResponseData;
+import com.show.common.ResponseVO;
+import com.show.model.ShowMemberContactsDO;
+import com.show.service.ShowMemberContactsService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.Api;
+
+/**
+ *
+ * 学生联系方式表 前端控制器
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-26
+ */
+@RestController
+@Api(tags = "学生联系方式表")
+@RequestMapping("/showMemberContacts")
+public class ShowMemberContactsController {
+
+ @Autowired
+ private ShowMemberContactsService showMemberContactsService;
+
+ @PostMapping("memberContacts")
+ @ApiOperation("查看学生联系方式 memberId")
+ public ResponseVO memberContacts(@RequestBody ShowMemberContactsDO showMemberContactsDO){
+ return ResponseData.generateCreatedResponse(0,showMemberContactsService.memberContacts(showMemberContactsDO));
+ }
+
+ @PostMapping("addContact")
+ @ApiOperation("添加联系方式 memberId contactMethod imgUrl")
+ public ResponseVO addContact(@RequestBody ShowMemberContactsDO showMemberContactsDO){
+ return ResponseData.generateCreatedResponse(0,showMemberContactsService.addContact(showMemberContactsDO));
+ }
+
+ @PostMapping("deleteContact")
+ @ApiOperation("删除联系方式 id")
+ public ResponseVO deleteContact(@RequestBody ShowMemberContactsDO showMemberContactsDO){
+ return ResponseData.generateCreatedResponse(0,showMemberContactsService.deleteContact(showMemberContactsDO));
+ }
+
+ @PostMapping("updateContact")
+ @ApiOperation("编辑联系方式 id imgUrl")
+ public ResponseVO updateContact(@RequestBody ShowMemberContactsDO showMemberContactsDO){
+ return ResponseData.generateCreatedResponse(0,showMemberContactsService.updateContact(showMemberContactsDO));
+ }
+
+}
diff --git a/src/main/java/com/show/controller/ShowWorksController.java b/src/main/java/com/show/controller/ShowWorksController.java
new file mode 100644
index 0000000..fd0ce6a
--- /dev/null
+++ b/src/main/java/com/show/controller/ShowWorksController.java
@@ -0,0 +1,111 @@
+package com.show.controller;
+
+
+import com.show.common.ResponseData;
+import com.show.common.ResponseVO;
+import com.show.dto.member.CreatorsDTO;
+import com.show.dto.work.MemberWorksDTO;
+import com.show.dto.work.MyWorksDTO;
+import com.show.dto.work.PageWorksDTO;
+import com.show.dto.work.SubmitWorkDTO;
+import com.show.model.MemberDO;
+import com.show.model.ShowWorksDO;
+import com.show.service.ShowWorksService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.Api;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@RestController
+@Api(tags = "展评字典表")
+@RequestMapping("/showWorks")
+public class ShowWorksController {
+
+ @Autowired
+ private ShowWorksService showWorksService;
+
+ @PostMapping("hotSpotWorks")
+ @ApiOperation("首页热点内容 academyId ")
+ public ResponseVO hotSpotWorks(@RequestBody MemberDO memberDO){
+ return ResponseData.generateCreatedResponse(0,showWorksService.hotSpotWorks(memberDO));
+ }
+
+ @PostMapping("pageWorks")
+ @ApiOperation("首页共创作品 pageSize pageNum academyId labelId title")
+ public ResponseVO pageWorks(@RequestBody PageWorksDTO pageWorksDTO){
+ return ResponseData.generateCreatedResponse(0,showWorksService.pageWorks(pageWorksDTO));
+ }
+
+ @PostMapping("oneWork")
+ @ApiOperation("首页查看作品详情 id ")
+ public ResponseVO oneWork(@RequestBody ShowWorksDO showWorksDO){
+ return ResponseData.generateCreatedResponse(0,showWorksService.oneWork(showWorksDO));
+ }
+
+ @PostMapping("memberWorks")
+ @ApiOperation("查看某个人的所有作品(已通过的) memberId pageSize pageNum")
+ public ResponseVO memberWorks(@RequestBody MemberWorksDTO memberWorksDTO){
+ return ResponseData.generateCreatedResponse(0,showWorksService.memberWorks(memberWorksDTO));
+ }
+
+ @PostMapping("creators")
+ @ApiOperation("创作者 academyId aliasName pageSize pageNum")
+ public ResponseVO creators(@RequestBody CreatorsDTO creatorsDTO){
+ return ResponseData.generateCreatedResponse(0,showWorksService.creators(creatorsDTO));
+ }
+
+ @PostMapping("myWorks")
+ @ApiOperation("创作者主页-作品管理 pageSize pageNum memberId submitStatus")
+ public ResponseVO myWorks(@RequestBody MyWorksDTO myWorksDTO){
+ return ResponseData.generateCreatedResponse(0,showWorksService.myWorks(myWorksDTO));
+ }
+
+ @PostMapping("myWorksOverview")
+ @ApiOperation("创作者主页-作品管理-概览 memberId ")
+ public ResponseVO myWorksOverview(@RequestBody MyWorksDTO myWorksDTO){
+ return ResponseData.generateCreatedResponse(0,showWorksService.myWorksOverview(myWorksDTO));
+ }
+
+ @PostMapping("hideWork")
+ @ApiOperation("隐藏作品 id")
+ public ResponseVO hideWork(@RequestBody ShowWorksDO showWorksDO){
+ return ResponseData.generateCreatedResponse(0,showWorksService.hideWork(showWorksDO));
+ }
+
+ @PostMapping("showWork")
+ @ApiOperation("隐藏作品打开 id")
+ public ResponseVO showWork(@RequestBody ShowWorksDO showWorksDO){
+ return ResponseData.generateCreatedResponse(0,showWorksService.showWork(showWorksDO));
+ }
+
+ @PostMapping("submitWork")
+ @ApiOperation("发布作品/驳回后再提交 memberId labelIds[] title workDesc works instanceId")
+ public ResponseVO submitWork(@RequestBody SubmitWorkDTO submitWorkDTO){
+ return ResponseData.generateCreatedResponse(0,showWorksService.submitWork(submitWorkDTO));
+ }
+
+// @PostMapping("updateWork")
+// @ApiOperation("编辑作品 id memberId labelIds[] title workDesc works instanceId ")
+// public ResponseVO updateWork(@RequestBody SubmitWorkDTO submitWorkDTO){
+// return ResponseData.generateCreatedResponse(0,showWorksService.updateWork(submitWorkDTO));
+// }
+
+ @PostMapping("addViewCnt")
+ @ApiOperation("添加浏览量 id 作品id")
+ public ResponseVO addViewCnt(@RequestBody ShowWorksDO showWorksDO){
+ return ResponseData.generateCreatedResponse(0,showWorksService.addViewCnt(showWorksDO));
+ }
+
+}
diff --git a/src/main/java/com/show/controller/SmsVerifyCodeController.java b/src/main/java/com/show/controller/SmsVerifyCodeController.java
new file mode 100644
index 0000000..2f6c305
--- /dev/null
+++ b/src/main/java/com/show/controller/SmsVerifyCodeController.java
@@ -0,0 +1,22 @@
+package com.show.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.Api;
+
+/**
+ *
+ * 短信验证码记录表 前端控制器
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+@RestController
+@Api(tags = "短信验证码记录表")
+@RequestMapping("/sms-verify-code-do")
+public class SmsVerifyCodeController {
+
+}
diff --git a/src/main/java/com/show/controller/WorkFlowController.java b/src/main/java/com/show/controller/WorkFlowController.java
new file mode 100644
index 0000000..8002440
--- /dev/null
+++ b/src/main/java/com/show/controller/WorkFlowController.java
@@ -0,0 +1,29 @@
+package com.show.controller;
+
+import com.show.common.ResponseData;
+import com.show.common.ResponseVO;
+import com.show.dto.work.WorkflowHistory;
+import com.show.service.WorkflowService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/workflow")
+@Api(tags = "工作流")
+public class WorkFlowController {
+
+ @Autowired
+ private WorkflowService workflowService;
+
+ @PostMapping("/history")
+ @ApiOperation("查看某个审批的每个节点审批历史记录 instanceId ")
+ public ResponseVO getWorkflowHistory(@RequestBody WorkflowHistory workflowHistory) {
+ return ResponseData.generateCreatedResponse(0,workflowService.getWorkflowHistory(workflowHistory));
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/show/dto/member/CreatorsDTO.java b/src/main/java/com/show/dto/member/CreatorsDTO.java
new file mode 100644
index 0000000..e151b97
--- /dev/null
+++ b/src/main/java/com/show/dto/member/CreatorsDTO.java
@@ -0,0 +1,16 @@
+package com.show.dto.member;
+
+import lombok.Data;
+
+@Data
+public class CreatorsDTO {
+
+ private Long academyId;
+
+ private String aliasName;
+
+ private Integer pageSize;
+
+ private Integer pageNum;
+
+}
diff --git a/src/main/java/com/show/dto/member/MemberWorkGroupDTO.java b/src/main/java/com/show/dto/member/MemberWorkGroupDTO.java
new file mode 100644
index 0000000..cea1e3f
--- /dev/null
+++ b/src/main/java/com/show/dto/member/MemberWorkGroupDTO.java
@@ -0,0 +1,16 @@
+package com.show.dto.member;
+
+import lombok.Data;
+
+@Data
+public class MemberWorkGroupDTO {
+
+ private Integer pageSize;
+
+ private Integer pageNum;
+
+ private Long memberId;
+
+ private String applyType;
+
+}
diff --git a/src/main/java/com/show/dto/member/UpdateMemberInfoDTO.java b/src/main/java/com/show/dto/member/UpdateMemberInfoDTO.java
new file mode 100644
index 0000000..1e8531e
--- /dev/null
+++ b/src/main/java/com/show/dto/member/UpdateMemberInfoDTO.java
@@ -0,0 +1,16 @@
+package com.show.dto.member;
+
+import com.show.model.MemberDO;
+import com.show.model.ShowMemberContactsDO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UpdateMemberInfoDTO extends MemberDO {
+
+ private List memberContactsDOS;
+
+ private String verifyCode;
+
+}
diff --git a/src/main/java/com/show/dto/work/FlowNodesDTO.java b/src/main/java/com/show/dto/work/FlowNodesDTO.java
new file mode 100644
index 0000000..328868e
--- /dev/null
+++ b/src/main/java/com/show/dto/work/FlowNodesDTO.java
@@ -0,0 +1,10 @@
+package com.show.dto.work;
+
+import lombok.Data;
+
+@Data
+public class FlowNodesDTO {
+
+ private Long mappingId;
+
+}
diff --git a/src/main/java/com/show/dto/work/HotSpotWorksDTO.java b/src/main/java/com/show/dto/work/HotSpotWorksDTO.java
new file mode 100644
index 0000000..344ed78
--- /dev/null
+++ b/src/main/java/com/show/dto/work/HotSpotWorksDTO.java
@@ -0,0 +1,10 @@
+package com.show.dto.work;
+
+import lombok.Data;
+
+@Data
+public class HotSpotWorksDTO {
+
+ private Long academyId;
+
+}
diff --git a/src/main/java/com/show/dto/work/MemberWorksDTO.java b/src/main/java/com/show/dto/work/MemberWorksDTO.java
new file mode 100644
index 0000000..88a45a8
--- /dev/null
+++ b/src/main/java/com/show/dto/work/MemberWorksDTO.java
@@ -0,0 +1,14 @@
+package com.show.dto.work;
+
+import lombok.Data;
+
+@Data
+public class MemberWorksDTO {
+
+ private Long memberId;
+
+ private Integer pageSize;
+
+ private Integer pageNum;
+
+}
diff --git a/src/main/java/com/show/dto/work/MyWorksDTO.java b/src/main/java/com/show/dto/work/MyWorksDTO.java
new file mode 100644
index 0000000..e3bf64e
--- /dev/null
+++ b/src/main/java/com/show/dto/work/MyWorksDTO.java
@@ -0,0 +1,16 @@
+package com.show.dto.work;
+
+import lombok.Data;
+
+@Data
+public class MyWorksDTO {
+
+ private Integer pageSize;
+
+ private Integer pageNum;
+
+ private Long memberId;
+
+ private String submitStatus;
+
+}
diff --git a/src/main/java/com/show/dto/work/PageWorksDTO.java b/src/main/java/com/show/dto/work/PageWorksDTO.java
new file mode 100644
index 0000000..f1fc8e3
--- /dev/null
+++ b/src/main/java/com/show/dto/work/PageWorksDTO.java
@@ -0,0 +1,17 @@
+package com.show.dto.work;
+
+import lombok.Data;
+
+@Data
+public class PageWorksDTO {
+
+ private Integer pageSize;
+
+ private Integer pageNum;
+
+ private Long labelId;
+
+ private Long academyId;
+
+ private String title;
+}
diff --git a/src/main/java/com/show/dto/work/SubmitWorkDTO.java b/src/main/java/com/show/dto/work/SubmitWorkDTO.java
new file mode 100644
index 0000000..d612ab4
--- /dev/null
+++ b/src/main/java/com/show/dto/work/SubmitWorkDTO.java
@@ -0,0 +1,14 @@
+package com.show.dto.work;
+
+import com.show.model.ShowWorksDO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SubmitWorkDTO extends ShowWorksDO {
+
+ private List labelIds;
+
+
+}
diff --git a/src/main/java/com/show/dto/work/WorkflowHistory.java b/src/main/java/com/show/dto/work/WorkflowHistory.java
new file mode 100644
index 0000000..fe7ce25
--- /dev/null
+++ b/src/main/java/com/show/dto/work/WorkflowHistory.java
@@ -0,0 +1,32 @@
+package com.show.dto.work;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.show.util.BaseModel;
+import lombok.Data;
+
+@Data
+@TableName("workflow_history")
+public class WorkflowHistory extends BaseModel {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ private Long instanceId;
+
+ private Long nodeId;
+
+ private String nodeKey;
+
+ private String nodeName;
+
+ private Long assignee;
+
+ private String assigneeType;
+
+ private String status;
+
+ private String approveOpinion;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/show/mapper/AcademyDictMapper.java b/src/main/java/com/show/mapper/AcademyDictMapper.java
new file mode 100644
index 0000000..f57198c
--- /dev/null
+++ b/src/main/java/com/show/mapper/AcademyDictMapper.java
@@ -0,0 +1,18 @@
+package com.show.mapper;
+
+import com.show.model.AcademyDictDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+ @Repository
+public interface AcademyDictMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/show/mapper/AcademyPermissionMappingMapper.java b/src/main/java/com/show/mapper/AcademyPermissionMappingMapper.java
new file mode 100644
index 0000000..a886bdd
--- /dev/null
+++ b/src/main/java/com/show/mapper/AcademyPermissionMappingMapper.java
@@ -0,0 +1,24 @@
+package com.show.mapper;
+
+import com.show.model.AcademyPermissionMappingDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * 院校权限映射表 Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+ @Repository
+public interface AcademyPermissionMappingMapper extends BaseMapper {
+
+ /**
+ * 院校端对应申请的academy_permission_mapping的id 学生
+ * name : 审批项名称
+ */
+ Long permissionMappingId(Long memberId,String name);
+
+}
diff --git a/src/main/java/com/show/mapper/AcademyPlatformsMapper.java b/src/main/java/com/show/mapper/AcademyPlatformsMapper.java
new file mode 100644
index 0000000..b41a5b0
--- /dev/null
+++ b/src/main/java/com/show/mapper/AcademyPlatformsMapper.java
@@ -0,0 +1,18 @@
+package com.show.mapper;
+
+import com.show.model.AcademyPlatformsDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+ @Repository
+public interface AcademyPlatformsMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/show/mapper/AcademyRoleDictMapper.java b/src/main/java/com/show/mapper/AcademyRoleDictMapper.java
new file mode 100644
index 0000000..33e04b4
--- /dev/null
+++ b/src/main/java/com/show/mapper/AcademyRoleDictMapper.java
@@ -0,0 +1,27 @@
+package com.show.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.show.model.AcademyRoleDictDO;
+import com.show.vo.work.NamesVO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ *
+ * 角色表 Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2024-12-12
+ */
+@Repository
+public interface AcademyRoleDictMapper extends BaseMapper {
+
+ List roles(Long academyId);
+
+ List checkRoles(Long academyId, String checkRole);
+
+ List rolesName(@Param("roleIds") List roleIds);
+}
diff --git a/src/main/java/com/show/mapper/AdministerMapper.java b/src/main/java/com/show/mapper/AdministerMapper.java
new file mode 100644
index 0000000..8336235
--- /dev/null
+++ b/src/main/java/com/show/mapper/AdministerMapper.java
@@ -0,0 +1,31 @@
+package com.show.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.show.model.AdministerDO;
+import com.show.vo.administer.NamesVO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ *
+ * 管理平台用户 Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2024-02-23
+ */
+@Repository
+public interface AdministerMapper extends BaseMapper {
+
+ /**
+ * 获取用户名
+ */
+ List names(@Param("ids") List ids);
+
+ /**
+ * 获取用户名
+ */
+ String administerName(Long id);
+}
diff --git a/src/main/java/com/show/mapper/MemberMapper.java b/src/main/java/com/show/mapper/MemberMapper.java
new file mode 100644
index 0000000..0b66c9d
--- /dev/null
+++ b/src/main/java/com/show/mapper/MemberMapper.java
@@ -0,0 +1,38 @@
+package com.show.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.show.model.MemberDO;
+import com.show.vo.member.LoginVO;
+import com.show.vo.member.MemberBaseInoVO;
+import com.show.vo.member.MemberWorkGroupVO;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * 学生表 Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@Repository
+public interface MemberMapper extends BaseMapper {
+
+ /**
+ * 学员基本信息
+ */
+ MemberBaseInoVO memberBaseIno(Long id);
+
+ /**
+ * 登录
+ */
+ LoginVO login(String studyNo);
+
+ /**
+ * 审批中心-作品
+ */
+ IPage memberWorkGroup(IPage page, Long memberId, String applyType);
+
+}
diff --git a/src/main/java/com/subsidy/mapper/AdministerMapper.java b/src/main/java/com/show/mapper/ShowBannersMapper.java
similarity index 73%
rename from src/main/java/com/subsidy/mapper/AdministerMapper.java
rename to src/main/java/com/show/mapper/ShowBannersMapper.java
index 6d561fb..ea0fbb3 100644
--- a/src/main/java/com/subsidy/mapper/AdministerMapper.java
+++ b/src/main/java/com/show/mapper/ShowBannersMapper.java
@@ -1,18 +1,18 @@
-package com.subsidy.mapper;
+package com.show.mapper;
-import com.subsidy.model.AdministerDO;
+import com.show.model.ShowBannersDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
/**
*
- * 管理平台用户 Mapper 接口
+ * Mapper 接口
*
*
* @author Tuyp
* @since 2025-11-25
*/
@Repository
-public interface AdministerMapper extends BaseMapper {
+public interface ShowBannersMapper extends BaseMapper {
}
diff --git a/src/main/java/com/show/mapper/ShowLabelDictMapper.java b/src/main/java/com/show/mapper/ShowLabelDictMapper.java
new file mode 100644
index 0000000..5433e47
--- /dev/null
+++ b/src/main/java/com/show/mapper/ShowLabelDictMapper.java
@@ -0,0 +1,18 @@
+package com.show.mapper;
+
+import com.show.model.ShowLabelDictDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+ @Repository
+public interface ShowLabelDictMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/show/mapper/ShowMemberContactsMapper.java b/src/main/java/com/show/mapper/ShowMemberContactsMapper.java
new file mode 100644
index 0000000..36fc7b7
--- /dev/null
+++ b/src/main/java/com/show/mapper/ShowMemberContactsMapper.java
@@ -0,0 +1,30 @@
+package com.show.mapper;
+
+import com.show.model.ShowMemberContactsDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ *
+ * 学生联系方式表 Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-26
+ */
+@Repository
+public interface ShowMemberContactsMapper extends BaseMapper {
+
+ /**
+ * 现有的联系方式
+ */
+ List memberCurrentContacts(Long memberId);
+
+ /**
+ * 需要删除的旧的联系方式
+ */
+ List deleteIds(Long memberId,List showMemberContactsDOS);
+
+}
diff --git a/src/main/java/com/show/mapper/ShowWorkLabelsMapper.java b/src/main/java/com/show/mapper/ShowWorkLabelsMapper.java
new file mode 100644
index 0000000..4d75b11
--- /dev/null
+++ b/src/main/java/com/show/mapper/ShowWorkLabelsMapper.java
@@ -0,0 +1,18 @@
+package com.show.mapper;
+
+import com.show.model.ShowWorkLabelsDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+ @Repository
+public interface ShowWorkLabelsMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/show/mapper/ShowWorksMapper.java b/src/main/java/com/show/mapper/ShowWorksMapper.java
new file mode 100644
index 0000000..71cda21
--- /dev/null
+++ b/src/main/java/com/show/mapper/ShowWorksMapper.java
@@ -0,0 +1,73 @@
+package com.show.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.show.model.ShowLabelDictDO;
+import com.show.model.ShowWorksDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.show.vo.work.*;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+ @Repository
+public interface ShowWorksMapper extends BaseMapper {
+
+ /**
+ * 首页热点作品
+ * @return
+ */
+ List hotSpotWorks(Long academyId);
+
+ /**
+ * 首页作品下拉
+ */
+ IPage pageWorks(IPage iPage,Long labelId,Long academyId,String title);
+
+ /**
+ * 查看作品详情
+ */
+ OneWorkVO oneWork(Long id);
+
+ /**
+ * 作品对应的标签
+ */
+ List workLabels(Long workId);
+
+ /**
+ * 查看某人的作品(已通过)
+ */
+ IPage memberWorks(IPage iPage,Long memberId);
+
+ /**
+ * 查看某人的作品(已通过)
+ */
+ List memberWorksWithoutPage(Long memberId);
+
+ /**
+ * 查看某人所有作品
+ */
+ IPage myWorks(IPage iPage, Long memberId, String submitStatus);
+
+ /**
+ * 首页创作者
+ */
+ IPage creators(IPage iPage, Long academyId, String aliasName);
+
+ /**
+ * 将作品置为已结束
+ */
+ void finishWork(Long id);
+
+ /**
+ * 修改作品
+ */
+ void updateSubmitWork(Long id,String homePage,String works,String workDesc,String newStatus);
+}
diff --git a/src/main/java/com/show/mapper/SmsVerifyCodeMapper.java b/src/main/java/com/show/mapper/SmsVerifyCodeMapper.java
new file mode 100644
index 0000000..990396d
--- /dev/null
+++ b/src/main/java/com/show/mapper/SmsVerifyCodeMapper.java
@@ -0,0 +1,18 @@
+package com.show.mapper;
+
+import com.show.model.SmsVerifyCodeDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * 短信验证码记录表 Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+ @Repository
+public interface SmsVerifyCodeMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/show/mapper/WorkflowCopyToMapper.java b/src/main/java/com/show/mapper/WorkflowCopyToMapper.java
new file mode 100644
index 0000000..f2d466b
--- /dev/null
+++ b/src/main/java/com/show/mapper/WorkflowCopyToMapper.java
@@ -0,0 +1,18 @@
+package com.show.mapper;
+
+import com.show.model.WorkflowCopyToDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+ @Repository
+public interface WorkflowCopyToMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/show/mapper/WorkflowInstanceMapper.java b/src/main/java/com/show/mapper/WorkflowInstanceMapper.java
new file mode 100644
index 0000000..d565b53
--- /dev/null
+++ b/src/main/java/com/show/mapper/WorkflowInstanceMapper.java
@@ -0,0 +1,25 @@
+package com.show.mapper;
+
+import com.show.model.WorkflowInstance;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.show.model.WorkflowNode;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+@Repository
+public interface WorkflowInstanceMapper extends BaseMapper {
+
+ /**
+ * 查看当前工作流所属节点详情1
+ */
+ WorkflowNode instanceCurrentNode(Long instanceId);
+
+
+}
diff --git a/src/main/java/com/show/mapper/WorkflowNodeMapper.java b/src/main/java/com/show/mapper/WorkflowNodeMapper.java
new file mode 100644
index 0000000..25f2a39
--- /dev/null
+++ b/src/main/java/com/show/mapper/WorkflowNodeMapper.java
@@ -0,0 +1,18 @@
+package com.show.mapper;
+
+import com.show.model.WorkflowNode;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+ @Repository
+public interface WorkflowNodeMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/show/mapper/WorkflowTaskMapper.java b/src/main/java/com/show/mapper/WorkflowTaskMapper.java
new file mode 100644
index 0000000..7bf9539
--- /dev/null
+++ b/src/main/java/com/show/mapper/WorkflowTaskMapper.java
@@ -0,0 +1,51 @@
+package com.show.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.show.model.WorkflowTask;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.show.vo.work.GetWorkflowHistoryVO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+@Repository
+public interface WorkflowTaskMapper extends BaseMapper {
+
+ /**
+ * 查看某人某个待审批的节点某个老师以角色身份可以在几个task里面
+ */
+ List administerRoleTasks(Long userId, Long instanceId, Long nodeId, Integer role);
+
+ /**
+ * 查看某个人物某项没有的角色d taskId
+ */
+ List administerNotInRoleTask(Integer role, Long userId, Long instanceId, Long nodeId);
+
+ /**
+ * 查出学生提交的第一条
+ */
+ WorkflowTask studentTask(Long instanceId);
+
+ /**
+ * 将所有待审核的任务置为已结束
+ */
+ void finishTodoTask(Long instanceId);
+
+ /**
+ * 将之前的workTask都置为0
+ */
+ void beforeTaskDone(Long instanceId);
+
+ /**
+ * 作品更新
+ */
+ List updatedWorks(Long instanceId);
+}
diff --git a/src/main/java/com/show/model/AcademyDictDO.java b/src/main/java/com/show/model/AcademyDictDO.java
new file mode 100644
index 0000000..50054e4
--- /dev/null
+++ b/src/main/java/com/show/model/AcademyDictDO.java
@@ -0,0 +1,67 @@
+package com.show.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("academy_dict")
+public class AcademyDictDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ private String academyName;
+
+ private String shortName;
+
+ private String location;
+
+ private String academyType;
+
+ /**
+ * 院校代码
+ */
+ private String academyCode;
+
+ /**
+ * 院校logo
+ */
+ private String academyLogo;
+
+ /**
+ * 教师小程序首页封面
+ */
+ private String teacherLogo;
+
+ /**
+ * 企业开放状态
+ */
+ private String companyInfoStatus;
+
+ /**
+ * 职位封面
+ */
+ private String positionLogo;
+
+ /**
+ * 共创展厅logo
+ */
+ private String showLogo;
+
+
+}
diff --git a/src/main/java/com/show/model/AcademyPermissionMappingDO.java b/src/main/java/com/show/model/AcademyPermissionMappingDO.java
new file mode 100644
index 0000000..ab1d226
--- /dev/null
+++ b/src/main/java/com/show/model/AcademyPermissionMappingDO.java
@@ -0,0 +1,50 @@
+package com.show.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ * 院校权限映射表
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("academy_permission_mapping")
+public class AcademyPermissionMappingDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ private Long academyId;
+
+ private Long permissionId;
+
+ private String workflowFlag;
+
+ /**
+ * 排序
+ */
+ private Integer orderNo;
+
+ /**
+ * 别名
+ */
+ private String aliasName;
+
+ /**
+ * 版本号
+ */
+ private Integer versionCode;
+
+
+}
diff --git a/src/main/java/com/show/model/AcademyPlatformsDO.java b/src/main/java/com/show/model/AcademyPlatformsDO.java
new file mode 100644
index 0000000..f282ca2
--- /dev/null
+++ b/src/main/java/com/show/model/AcademyPlatformsDO.java
@@ -0,0 +1,44 @@
+package com.show.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("academy_platforms")
+public class AcademyPlatformsDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 院校id
+ */
+ private Long academyId;
+
+ /**
+ * 平台名称
+ */
+ private String platformName;
+
+ /**
+ * logo
+ */
+ private String logo;
+
+
+}
diff --git a/src/main/java/com/show/model/AcademyRoleDictDO.java b/src/main/java/com/show/model/AcademyRoleDictDO.java
new file mode 100644
index 0000000..2e2bd74
--- /dev/null
+++ b/src/main/java/com/show/model/AcademyRoleDictDO.java
@@ -0,0 +1,38 @@
+package com.show.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.show.util.BaseModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ * 角色表
+ *
+ *
+ * @author Tuyp
+ * @since 2024-12-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("academy_role_dict")
+public class AcademyRoleDictDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ private Long academyId;
+
+ /**
+ * 角色
+ */
+ private String role;
+
+ private String roleType;
+
+
+}
diff --git a/src/main/java/com/subsidy/model/AdministerDO.java b/src/main/java/com/show/model/AdministerDO.java
similarity index 89%
rename from src/main/java/com/subsidy/model/AdministerDO.java
rename to src/main/java/com/show/model/AdministerDO.java
index ab8aefd..4e2acdd 100644
--- a/src/main/java/com/subsidy/model/AdministerDO.java
+++ b/src/main/java/com/show/model/AdministerDO.java
@@ -1,9 +1,9 @@
-package com.subsidy.model;
+package com.show.model;
-import com.subsidy.util.BaseModel;
-import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.show.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode;
*
*
* @author Tuyp
- * @since 2025-11-25
+ * @since 2024-02-23
*/
@Data
@EqualsAndHashCode(callSuper = true)
@@ -49,11 +49,6 @@ public class AdministerDO extends BaseModel {
private Long companyId;
/**
- * 劳务id
- */
- private Long laborId;
-
- /**
* 院校id
*/
private Long academyId;
@@ -64,6 +59,10 @@ public class AdministerDO extends BaseModel {
private Long collegeId;
/**
+ *
+ */
+
+ /**
* 成员名称
*/
private String userName;
@@ -84,7 +83,7 @@ public class AdministerDO extends BaseModel {
private Integer role;
/**
- * 上一次登录使用的角色
+ * 上次登录使用的角色
*/
private Integer lastRole;
@@ -93,14 +92,10 @@ public class AdministerDO extends BaseModel {
*/
private String remark;
- /**
- * 微信openid
- */
private String openid;
- private String workNo;
+ private Long workNo;
+// 0: 首次 1:非首次
private String firstLogin;
-
-
}
diff --git a/src/main/java/com/show/model/MemberDO.java b/src/main/java/com/show/model/MemberDO.java
new file mode 100644
index 0000000..252b86f
--- /dev/null
+++ b/src/main/java/com/show/model/MemberDO.java
@@ -0,0 +1,315 @@
+package com.show.model;
+
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ * 学生表
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("member")
+public class MemberDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 院校名
+ */
+ private Long academyId;
+
+ /**
+ * 公司名
+ */
+ private Long companyId;
+
+ /**
+ * 姓名
+ */
+ private String userName;
+
+ /**
+ * 别名
+ */
+ private String aliasName;
+
+ /**
+ * 账号
+ */
+ private String accountName;
+
+ /**
+ * 英文名
+ */
+ private String accountNameEn;
+
+ /**
+ * 邮箱
+ */
+ private String email;
+
+ /**
+ * 工号
+ */
+ private String workNo;
+
+ /**
+ * 入职时间
+ */
+ private String inductionDate;
+
+ /**
+ * 手机号
+ */
+ private String telephone;
+
+ /**
+ * 密码
+ */
+ private String password;
+
+ /**
+ * 性别
+ */
+ private String gender;
+
+ /**
+ * 头像
+ */
+ private String image;
+
+ /**
+ * 人脸核验--照片
+ */
+ private String checkImage;
+
+ /**
+ * 采集时间
+ */
+ private LocalDateTime checkTime;
+
+ /**
+ * 身份证号
+ */
+ private String idCard;
+
+ /**
+ * 身份证照片
+ */
+ private String idCardPhoto;
+
+ /**
+ * 启用/冻结
+ */
+ private String status;
+
+ /**
+ * 是否登陆过 1 是 0 不是
+ */
+ private Integer firstLogin;
+
+ private String activityStatus;
+
+ /**
+ * 激活时间
+ */
+ private String activeDate;
+
+ /**
+ * QQ号
+ */
+ private String qqNo;
+
+ /**
+ * 微信账号
+ */
+ private String wechat;
+
+ /**
+ * 实习状态
+ */
+ private String practiceStatus;
+
+ /**
+ * 学院id
+ */
+ private Long collegeId;
+
+ /**
+ * 专业
+ */
+ private String major;
+
+ private Long majorId;
+
+ /**
+ * 入学年份
+ */
+ private String enrollmentYear;
+
+ /**
+ * 工资账户
+ */
+ private String payrollAccount;
+
+ private String education;
+
+ /**
+ * 开户行
+ */
+ private String bank;
+
+ private String openId;
+
+ /**
+ * 0:学生 2:职工 3:人才
+ */
+ private Integer memberType;
+
+ /**
+ * 学号
+ */
+ private String studyNo;
+
+ private Long classId;
+
+ /**
+ * 班级
+ */
+ private String className;
+
+ /**
+ * 上报专业
+ */
+ private String reportMajor;
+
+ /**
+ * 考生号
+ */
+ private String examNo;
+
+ /**
+ * 学制
+ */
+ private String educationalSystem;
+
+ /**
+ * 民族
+ */
+ private String nationality;
+
+ /**
+ * 政治面貌
+ */
+ private String politicalStatus;
+
+ /**
+ * 生源地
+ */
+ private String originalPlace;
+
+ /**
+ * 培养方式
+ */
+ private String cultureMethod;
+
+ /**
+ * 毕业情况
+ */
+ private String graduateStatus;
+
+ /**
+ * 师范生类别
+ */
+ private String pedagogicalType;
+
+ /**
+ * 毕业季节
+ */
+ private String graduateSeason;
+
+ /**
+ * 贫困生类别
+ */
+ private String povertyStatus;
+
+ /**
+ * 家庭电话
+ */
+ private String homePhone;
+
+ /**
+ * 家庭地址
+ */
+ private String homeAddress;
+
+ /**
+ * 邮编
+ */
+ private String homeZipCode;
+
+ /**
+ * 扩招标志
+ */
+ private String expandFlag;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 学籍状态
+ */
+ private String studentStatus;
+
+ /**
+ * 是否建立档案
+ */
+ private String fileEstablishFlag;
+
+ /**
+ * 52贫困县
+ */
+ private String poorCounties;
+
+ /**
+ * 学习形式
+ */
+ private String studyForm;
+
+ /**
+ * 层级
+ */
+ private String cc;
+
+ /**
+ * 年级
+ */
+ private String nj;
+
+ /**
+ * 异动状态
+ */
+ private String unusualStatus;
+
+ /**
+ * 志愿者证书地址
+ */
+ private String volunteerCertUrl;
+
+
+}
diff --git a/src/main/java/com/show/model/ShowBannersDO.java b/src/main/java/com/show/model/ShowBannersDO.java
new file mode 100644
index 0000000..0706ca7
--- /dev/null
+++ b/src/main/java/com/show/model/ShowBannersDO.java
@@ -0,0 +1,45 @@
+package com.show.model;
+
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("show_banners")
+public class ShowBannersDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 院校id
+ */
+ private Long academyId;
+
+ private String bannerUrl;
+
+ /**
+ * 首页展示,是/否
+ */
+ private String showFlag;
+
+ private Integer orderNo;
+
+ private String backColor;
+
+
+}
diff --git a/src/main/java/com/show/model/ShowLabelDictDO.java b/src/main/java/com/show/model/ShowLabelDictDO.java
new file mode 100644
index 0000000..3e53369
--- /dev/null
+++ b/src/main/java/com/show/model/ShowLabelDictDO.java
@@ -0,0 +1,33 @@
+package com.show.model;
+
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("show_label_dict")
+public class ShowLabelDictDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ private Long academyId;
+
+ private String label;
+
+
+}
diff --git a/src/main/java/com/show/model/ShowMemberContactsDO.java b/src/main/java/com/show/model/ShowMemberContactsDO.java
new file mode 100644
index 0000000..403c45c
--- /dev/null
+++ b/src/main/java/com/show/model/ShowMemberContactsDO.java
@@ -0,0 +1,41 @@
+package com.show.model;
+
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ * 学生联系方式表
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("show_member_contacts")
+public class ShowMemberContactsDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ private Long memberId;
+
+ /**
+ * 联系方式
+ */
+ private String contactMethod;
+
+ /**
+ * 二维码
+ */
+ private String imgUrl;
+
+
+}
diff --git a/src/main/java/com/show/model/ShowWorkLabelsDO.java b/src/main/java/com/show/model/ShowWorkLabelsDO.java
new file mode 100644
index 0000000..b8dc6fb
--- /dev/null
+++ b/src/main/java/com/show/model/ShowWorkLabelsDO.java
@@ -0,0 +1,33 @@
+package com.show.model;
+
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("show_work_labels")
+public class ShowWorkLabelsDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ private Long workId;
+
+ private Long labelId;
+
+
+}
diff --git a/src/main/java/com/show/model/ShowWorksDO.java b/src/main/java/com/show/model/ShowWorksDO.java
new file mode 100644
index 0000000..399bc9d
--- /dev/null
+++ b/src/main/java/com/show/model/ShowWorksDO.java
@@ -0,0 +1,93 @@
+package com.show.model;
+
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("show_works")
+public class ShowWorksDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 学生id
+ */
+ private Long memberId;
+
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 提交时间
+ */
+ private String submitDate;
+
+ /**
+ * 提交状态
+ */
+ private String submitStatus;
+
+ /**
+ * 展示状态
+ */
+ private String showStatus;
+
+ /**
+ * 新的作品/作品更新
+ */
+ private String newStatus;
+
+ /**
+ * 驳回原因
+ */
+ private String opinion;
+
+ /**
+ * 展评描述
+ */
+ private String workDesc;
+
+ /**
+ * 展评地址数组
+ */
+ private String works;
+
+ /**
+ * 封面
+ */
+ private String homePage;
+
+ /**
+ * 热点
+ */
+ private String hotSpot;
+
+ /**
+ * 浏览量
+ */
+ private Integer viewCnt;
+
+ /**
+ * 审批流id
+ */
+ private Long instanceId;
+
+}
diff --git a/src/main/java/com/show/model/SmsVerifyCodeDO.java b/src/main/java/com/show/model/SmsVerifyCodeDO.java
new file mode 100644
index 0000000..78abceb
--- /dev/null
+++ b/src/main/java/com/show/model/SmsVerifyCodeDO.java
@@ -0,0 +1,39 @@
+package com.show.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ * 短信验证码记录表
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("sms_verify_code")
+public class SmsVerifyCodeDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 手机号
+ */
+ private String telephone;
+
+ /**
+ * 验证码
+ */
+ private String verifyCode;
+
+
+}
diff --git a/src/main/java/com/show/model/WorkflowCopyToDO.java b/src/main/java/com/show/model/WorkflowCopyToDO.java
new file mode 100644
index 0000000..9d4a5d0
--- /dev/null
+++ b/src/main/java/com/show/model/WorkflowCopyToDO.java
@@ -0,0 +1,49 @@
+package com.show.model;
+
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("workflow_copy_to")
+public class WorkflowCopyToDO extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * academy_permission_mapping的id
+ */
+ private Long mappingId;
+
+ /**
+ * 用户/角色
+ */
+ private String copyType;
+
+ /**
+ * 用户id/角色id
+ */
+ private Long copyId;
+
+ /**
+ * 版本号
+ */
+ private Integer versionCode;
+
+
+}
diff --git a/src/main/java/com/show/model/WorkflowInstance.java b/src/main/java/com/show/model/WorkflowInstance.java
new file mode 100644
index 0000000..155a74d
--- /dev/null
+++ b/src/main/java/com/show/model/WorkflowInstance.java
@@ -0,0 +1,67 @@
+package com.show.model;
+
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("workflow_instance")
+public class WorkflowInstance extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * academy_permission_mapping的id
+ */
+ private Long workflowId;
+
+ /**
+ * 申请类型
+ */
+ private String applyType;
+
+ /**
+ * 申请人id
+ */
+ private Long applyId;
+
+ private Integer versionCode;
+
+ private String workflowCode;
+
+ private String workflowVersion;
+
+ private String status;
+
+ /**
+ * workflow_node的主键id
+ */
+ private Long currentNode;
+
+ /**
+ * 审批结束时间
+ */
+ private Date finishTime;
+
+ private Long appId;
+
+
+}
diff --git a/src/main/java/com/show/model/WorkflowNode.java b/src/main/java/com/show/model/WorkflowNode.java
new file mode 100644
index 0000000..5cc46ff
--- /dev/null
+++ b/src/main/java/com/show/model/WorkflowNode.java
@@ -0,0 +1,70 @@
+package com.show.model;
+
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("workflow_node")
+public class WorkflowNode extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 审批id
+ */
+ private Long workflowId;
+
+ private Integer versionCode;
+
+ /**
+ * 当前key
+ */
+ private String nodeKey;
+
+ /**
+ * 节点名称
+ */
+ private String nodeName;
+
+ private String nodeType;
+
+ private String nodePattern;
+
+ /**
+ * 类型:用户/角色
+ */
+ private String approveType;
+
+ /**
+ * 用户id,角色id 逗号间隔
+ */
+ private String approveConfig;
+
+ /**
+ * 前置节点
+ */
+ private String prevNode;
+
+ /**
+ * 后置节点
+ */
+ private String nextNode;
+
+
+}
diff --git a/src/main/java/com/show/model/WorkflowTask.java b/src/main/java/com/show/model/WorkflowTask.java
new file mode 100644
index 0000000..15fb0ea
--- /dev/null
+++ b/src/main/java/com/show/model/WorkflowTask.java
@@ -0,0 +1,83 @@
+package com.show.model;
+
+import com.show.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("workflow_task")
+public class WorkflowTask extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 实例id
+ */
+ private Long instanceId;
+
+ /**
+ * 节点id
+ */
+ private Long nodeId;
+
+ /**
+ * 节点node_key
+ */
+ private String nodeKey;
+
+ /**
+ * 节点名称
+ */
+ private String nodeName;
+
+ /**
+ * 审批人
+ */
+ private Long assignee;
+
+ /**
+ * 审批类型:用户/角色
+ */
+ private String assigneeType;
+
+ /**
+ * 最终审批人
+ */
+ private Long checkId;
+
+ /**
+ * 审批状态
+ */
+ private String status;
+
+ /**
+ * 审批意见
+ */
+ private String approveOpinion;
+
+ private String startTime;
+
+ private String endTime;
+
+ /**
+ * 空:当前的 0:之前的(三方协议用)
+ */
+ private Integer currentWork;
+
+
+}
diff --git a/src/main/java/com/show/service/AcademyDictService.java b/src/main/java/com/show/service/AcademyDictService.java
new file mode 100644
index 0000000..0419d10
--- /dev/null
+++ b/src/main/java/com/show/service/AcademyDictService.java
@@ -0,0 +1,17 @@
+package com.show.service;
+
+import com.show.model.AcademyDictDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+public interface AcademyDictService extends IService {
+
+ AcademyDictDO academyDetail(AcademyDictDO academyDictDO);
+}
diff --git a/src/main/java/com/show/service/AcademyPermissionMappingService.java b/src/main/java/com/show/service/AcademyPermissionMappingService.java
new file mode 100644
index 0000000..cda06bd
--- /dev/null
+++ b/src/main/java/com/show/service/AcademyPermissionMappingService.java
@@ -0,0 +1,16 @@
+package com.show.service;
+
+import com.show.model.AcademyPermissionMappingDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 院校权限映射表 服务类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+public interface AcademyPermissionMappingService extends IService {
+
+}
diff --git a/src/main/java/com/show/service/AcademyPlatformsService.java b/src/main/java/com/show/service/AcademyPlatformsService.java
new file mode 100644
index 0000000..5634bd9
--- /dev/null
+++ b/src/main/java/com/show/service/AcademyPlatformsService.java
@@ -0,0 +1,16 @@
+package com.show.service;
+
+import com.show.model.AcademyPlatformsDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+public interface AcademyPlatformsService extends IService {
+
+}
diff --git a/src/main/java/com/show/service/MemberService.java b/src/main/java/com/show/service/MemberService.java
new file mode 100644
index 0000000..27ecc33
--- /dev/null
+++ b/src/main/java/com/show/service/MemberService.java
@@ -0,0 +1,37 @@
+package com.show.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.show.dto.member.MemberWorkGroupDTO;
+import com.show.dto.member.UpdateMemberInfoDTO;
+import com.show.model.MemberDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.show.model.ShowWorksDO;
+import com.show.vo.member.ApplyCenterSummaryVO;
+import com.show.vo.member.LoginVO;
+import com.show.vo.member.MemberBaseInoVO;
+import com.show.vo.member.MemberWorkGroupVO;
+
+/**
+ *
+ * 学生表 服务类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+public interface MemberService extends IService {
+
+ MemberBaseInoVO memberPage(MemberDO memberDO);
+
+ LoginVO login(MemberDO memberDO);
+
+ String activeMember(UpdateMemberInfoDTO updateMemberInfoDTO);
+
+ ApplyCenterSummaryVO applyCenterSummary(ShowWorksDO showWorksDO);
+
+ IPage memberWorkGroup(MemberWorkGroupDTO memberWorkGroupDTO);
+
+ String updateMemberInfo(UpdateMemberInfoDTO updateMemberInfoDTO);
+
+ String sendMsg(MemberDO memberDO);
+}
diff --git a/src/main/java/com/show/service/ShowBannersService.java b/src/main/java/com/show/service/ShowBannersService.java
new file mode 100644
index 0000000..57b6d01
--- /dev/null
+++ b/src/main/java/com/show/service/ShowBannersService.java
@@ -0,0 +1,27 @@
+package com.show.service;
+
+import com.show.model.ShowBannersDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+public interface ShowBannersService extends IService {
+
+ List homePageBanners(ShowBannersDO showBannersDO);
+
+ String addBanner(ShowBannersDO showBannersDO);
+
+ String deleteBanner(ShowBannersDO showBannersDO);
+
+ String updateBanner(ShowBannersDO showBannersDO);
+
+ List allBanners(ShowBannersDO showBannersDO);
+}
diff --git a/src/main/java/com/show/service/ShowLabelDictService.java b/src/main/java/com/show/service/ShowLabelDictService.java
new file mode 100644
index 0000000..75ed526
--- /dev/null
+++ b/src/main/java/com/show/service/ShowLabelDictService.java
@@ -0,0 +1,25 @@
+package com.show.service;
+
+import com.show.model.ShowLabelDictDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+public interface ShowLabelDictService extends IService {
+
+ String addLabel(ShowLabelDictDO showLabelDictDO);
+
+ List labels(ShowLabelDictDO showLabelDictDO);
+
+ String deleteLabel(ShowLabelDictDO showLabelDictDO);
+
+ String updateLabel(ShowLabelDictDO showLabelDictDO);
+}
diff --git a/src/main/java/com/show/service/ShowMemberContactsService.java b/src/main/java/com/show/service/ShowMemberContactsService.java
new file mode 100644
index 0000000..b822d78
--- /dev/null
+++ b/src/main/java/com/show/service/ShowMemberContactsService.java
@@ -0,0 +1,25 @@
+package com.show.service;
+
+import com.show.model.ShowMemberContactsDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ *
+ * 学生联系方式表 服务类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-26
+ */
+public interface ShowMemberContactsService extends IService {
+
+ List memberContacts(ShowMemberContactsDO showMemberContactsDO);
+
+ String addContact(ShowMemberContactsDO showMemberContactsDO);
+
+ String deleteContact(ShowMemberContactsDO showMemberContactsDO);
+
+ String updateContact(ShowMemberContactsDO showMemberContactsDO);
+}
diff --git a/src/main/java/com/subsidy/service/AdministerService.java b/src/main/java/com/show/service/ShowWorkLabelsService.java
similarity index 69%
rename from src/main/java/com/subsidy/service/AdministerService.java
rename to src/main/java/com/show/service/ShowWorkLabelsService.java
index c1c1942..3609921 100644
--- a/src/main/java/com/subsidy/service/AdministerService.java
+++ b/src/main/java/com/show/service/ShowWorkLabelsService.java
@@ -1,16 +1,16 @@
-package com.subsidy.service;
+package com.show.service;
-import com.subsidy.model.AdministerDO;
+import com.show.model.ShowWorkLabelsDO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
*
- * 管理平台用户 服务类
+ * 服务类
*
*
* @author Tuyp
* @since 2025-11-25
*/
-public interface AdministerService extends IService {
+public interface ShowWorkLabelsService extends IService {
}
diff --git a/src/main/java/com/show/service/ShowWorksService.java b/src/main/java/com/show/service/ShowWorksService.java
new file mode 100644
index 0000000..ca3d515
--- /dev/null
+++ b/src/main/java/com/show/service/ShowWorksService.java
@@ -0,0 +1,49 @@
+package com.show.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.show.dto.member.CreatorsDTO;
+import com.show.dto.work.MemberWorksDTO;
+import com.show.dto.work.MyWorksDTO;
+import com.show.dto.work.PageWorksDTO;
+import com.show.dto.work.SubmitWorkDTO;
+import com.show.model.MemberDO;
+import com.show.model.ShowWorksDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.show.vo.work.*;
+
+import java.util.List;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+public interface ShowWorksService extends IService {
+
+ List hotSpotWorks(MemberDO memberDO);
+
+ IPage pageWorks(PageWorksDTO pageWorksDTO);
+
+ OneWorkVO oneWork(ShowWorksDO showWorksDO);
+
+ IPage memberWorks(MemberWorksDTO memberWorksDTO);
+
+ IPage myWorks(MyWorksDTO myWorksDTO);
+
+ MyWorksOverviewVO myWorksOverview(MyWorksDTO myWorksDTO);
+
+ String hideWork(ShowWorksDO showWorksDO);
+
+ IPage creators(CreatorsDTO creatorsDTO);
+
+ String showWork(ShowWorksDO showWorksDO);
+
+ String submitWork(SubmitWorkDTO submitWorkDTO);
+
+ String updateWork(SubmitWorkDTO submitWorkDTO);
+
+ String addViewCnt(ShowWorksDO showWorksDO);
+}
diff --git a/src/main/java/com/show/service/SmsVerifyCodeService.java b/src/main/java/com/show/service/SmsVerifyCodeService.java
new file mode 100644
index 0000000..b7c6217
--- /dev/null
+++ b/src/main/java/com/show/service/SmsVerifyCodeService.java
@@ -0,0 +1,16 @@
+package com.show.service;
+
+import com.show.model.SmsVerifyCodeDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 短信验证码记录表 服务类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+public interface SmsVerifyCodeService extends IService {
+
+}
diff --git a/src/main/java/com/show/service/WorkflowService.java b/src/main/java/com/show/service/WorkflowService.java
new file mode 100644
index 0000000..ed09f97
--- /dev/null
+++ b/src/main/java/com/show/service/WorkflowService.java
@@ -0,0 +1,52 @@
+package com.show.service;
+
+
+import com.show.dto.work.FlowNodesDTO;
+import com.show.dto.work.WorkflowHistory;
+import com.show.model.WorkflowInstance;
+import com.show.model.WorkflowTask;
+import com.show.vo.work.CopiesVO;
+import com.show.vo.work.FlowNodesVO;
+import com.show.vo.work.GetWorkflowHistoryVO;
+import java.util.List;
+
+
+public interface WorkflowService {
+
+ /**
+ * 处理任务(驳回)
+ */
+ String reject(Long taskId, String assignee, String approveOpinion);
+
+ /**
+ * 获取工作流历史记录
+ */
+ List getWorkflowHistory(WorkflowHistory workflowHistory);
+
+ void createTasks(Long instanceId, Long mappingId, String nodeKey, Integer versionCode) ;
+
+ /**
+ * 修改任务状态 -->改为审核中
+ */
+ String updateWorkTaskStatus(Long instanceId);
+
+ /**
+ * 获取当前活动任务
+ */
+ List getActiveTasks(WorkflowHistory workflowHistory);
+
+ /**
+ * 获取工作流实例详情
+ */
+ WorkflowInstance getWorkflowInstance(WorkflowHistory workflowHistory);
+
+ /**
+ * 启动工作流实例
+ */
+ WorkflowInstance startWorkflow(Long memberId,String applyName,String roleType);
+
+ /**
+ * 被驳回,提交申请后继续审批流
+ */
+ WorkflowInstance rejectWorkflow(Long instanceId,Long memberId,String applyName,String roleType);
+}
\ No newline at end of file
diff --git a/src/main/java/com/show/service/impl/AcademyDictServiceImpl.java b/src/main/java/com/show/service/impl/AcademyDictServiceImpl.java
new file mode 100644
index 0000000..91369d9
--- /dev/null
+++ b/src/main/java/com/show/service/impl/AcademyDictServiceImpl.java
@@ -0,0 +1,24 @@
+package com.show.service.impl;
+
+import com.show.model.AcademyDictDO;
+import com.show.mapper.AcademyDictMapper;
+import com.show.service.AcademyDictService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+@Service
+public class AcademyDictServiceImpl extends ServiceImpl implements AcademyDictService {
+
+ @Override
+ public AcademyDictDO academyDetail(AcademyDictDO academyDictDO) {
+ return this.baseMapper.selectById(academyDictDO.getId());
+ }
+}
diff --git a/src/main/java/com/show/service/impl/AcademyPermissionMappingServiceImpl.java b/src/main/java/com/show/service/impl/AcademyPermissionMappingServiceImpl.java
new file mode 100644
index 0000000..b8363b5
--- /dev/null
+++ b/src/main/java/com/show/service/impl/AcademyPermissionMappingServiceImpl.java
@@ -0,0 +1,20 @@
+package com.show.service.impl;
+
+import com.show.model.AcademyPermissionMappingDO;
+import com.show.mapper.AcademyPermissionMappingMapper;
+import com.show.service.AcademyPermissionMappingService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 院校权限映射表 服务实现类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-27
+ */
+@Service
+public class AcademyPermissionMappingServiceImpl extends ServiceImpl implements AcademyPermissionMappingService {
+
+}
diff --git a/src/main/java/com/show/service/impl/AcademyPlatformsServiceImpl.java b/src/main/java/com/show/service/impl/AcademyPlatformsServiceImpl.java
new file mode 100644
index 0000000..0cc1483
--- /dev/null
+++ b/src/main/java/com/show/service/impl/AcademyPlatformsServiceImpl.java
@@ -0,0 +1,20 @@
+package com.show.service.impl;
+
+import com.show.model.AcademyPlatformsDO;
+import com.show.mapper.AcademyPlatformsMapper;
+import com.show.service.AcademyPlatformsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+@Service
+public class AcademyPlatformsServiceImpl extends ServiceImpl implements AcademyPlatformsService {
+
+}
diff --git a/src/main/java/com/show/service/impl/MemberServiceImpl.java b/src/main/java/com/show/service/impl/MemberServiceImpl.java
new file mode 100644
index 0000000..c95a0e8
--- /dev/null
+++ b/src/main/java/com/show/service/impl/MemberServiceImpl.java
@@ -0,0 +1,234 @@
+package com.show.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.show.common.constant.ApplyType;
+import com.show.common.exception.HttpException;
+import com.show.dto.member.MemberWorkGroupDTO;
+import com.show.dto.member.UpdateMemberInfoDTO;
+import com.show.mapper.ShowMemberContactsMapper;
+import com.show.mapper.ShowWorksMapper;
+import com.show.mapper.SmsVerifyCodeMapper;
+import com.show.model.*;
+import com.show.mapper.MemberMapper;
+import com.show.service.MemberService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.show.util.ConstantUtils;
+import com.show.util.DateUtil;
+import com.show.util.RandomUtil;
+import com.show.util.SMSUtils;
+import com.show.vo.member.ApplyCenterSummaryVO;
+import com.show.vo.member.LoginVO;
+import com.show.vo.member.MemberBaseInoVO;
+import com.show.vo.member.MemberWorkGroupVO;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * 学生表 服务实现类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@Service
+public class MemberServiceImpl extends ServiceImpl implements MemberService {
+
+ @Autowired
+ private ShowWorksMapper showWorksMapper;
+
+ @Autowired
+ private ShowMemberContactsMapper showMemberContactsMapper;
+
+ @Autowired
+ private SmsVerifyCodeMapper smsVerifyCodeMapper;
+
+ @Override
+ public MemberBaseInoVO memberPage(MemberDO memberDO) {
+ return this.baseMapper.memberBaseIno(memberDO.getId());
+ }
+
+ @Override
+ public LoginVO login(MemberDO memberDO) {
+ LoginVO loginVO = this.baseMapper.login(memberDO.getStudyNo());
+
+ if (null != loginVO) {
+ if (!memberDO.getIdCard().equals(loginVO.getIdCard().substring(loginVO.getIdCard().length() - 4))) {
+ throw new HttpException(24026);
+ } else {
+ return loginVO;
+ }
+ } else {
+ throw new HttpException(10011);
+ }
+ }
+
+ @Override
+ public String activeMember(UpdateMemberInfoDTO updateMemberInfoDTO) {
+
+ //验证验证码对不对
+ Integer smsCnt = smsVerifyCodeMapper.selectCount(new QueryWrapper()
+ .lambda()
+ .eq(SmsVerifyCodeDO::getTelephone, updateMemberInfoDTO.getTelephone())
+ .eq(SmsVerifyCodeDO::getVerifyCode, updateMemberInfoDTO.getVerifyCode())
+ .gt(SmsVerifyCodeDO::getCreateDate, LocalDateTime.now().minusMinutes(10L))
+ );
+
+ if (smsCnt > 0) {
+ updateMemberInfoDTO.setActivityStatus("已激活");
+ updateMemberInfoDTO.setActiveDate(DateUtil.currentTime());
+ this.baseMapper.updateById(updateMemberInfoDTO);
+ } else {
+ throw new HttpException(10004);
+ }
+
+ return ConstantUtils.SUCCESS_UPDATE;
+ }
+
+ @Override
+ public ApplyCenterSummaryVO applyCenterSummary(ShowWorksDO showWorksDO) {
+
+ ApplyCenterSummaryVO applyCenterSummaryVO = new ApplyCenterSummaryVO();
+ //总数
+ int totalCnt = showWorksMapper.selectCount(new QueryWrapper()
+ .lambda()
+ .eq(ShowWorksDO::getMemberId, showWorksDO.getMemberId()));
+ applyCenterSummaryVO.setTotalCnt(totalCnt);
+
+ //新作品
+ int newWorkCnt = showWorksMapper.selectCount(new QueryWrapper()
+ .lambda()
+ .eq(ShowWorksDO::getMemberId, showWorksDO.getMemberId())
+ .eq(ShowWorksDO::getNewStatus, ApplyType.NEW_SHOW));
+ applyCenterSummaryVO.setNewWorkCnt(newWorkCnt);
+
+ applyCenterSummaryVO.setUpdateCnt(totalCnt - newWorkCnt);
+ return applyCenterSummaryVO;
+ }
+
+ @Override
+ public IPage memberWorkGroup(MemberWorkGroupDTO memberWorkGroupDTO) {
+
+ Page pager = new Page(memberWorkGroupDTO.getPageNum(), memberWorkGroupDTO.getPageSize());
+
+ IPage memberWorkGroupVOIPage = this.baseMapper.memberWorkGroup(pager, memberWorkGroupDTO.getMemberId(), memberWorkGroupDTO.getApplyType());
+ List memberWorkGroupVOS = memberWorkGroupVOIPage.getRecords();
+
+ for (MemberWorkGroupVO memberWorkGroupVO : memberWorkGroupVOS) {
+ //标签
+ List showLabelDictDOS = showWorksMapper.workLabels(memberWorkGroupVO.getId());
+ memberWorkGroupVO.setShowLabelDictDOS(showLabelDictDOS);
+ }
+ return memberWorkGroupVOIPage;
+ }
+
+ @Override
+ public String updateMemberInfo(UpdateMemberInfoDTO updateMemberInfoDTO) {
+
+ //验证验证码对不对
+ Integer smsCnt = smsVerifyCodeMapper.selectCount(new QueryWrapper()
+ .lambda()
+ .eq(SmsVerifyCodeDO::getTelephone, updateMemberInfoDTO.getTelephone())
+ .eq(SmsVerifyCodeDO::getVerifyCode, updateMemberInfoDTO.getVerifyCode())
+ .gt(SmsVerifyCodeDO::getCreateDate, LocalDateTime.now().minusMinutes(10L))
+ );
+
+ if (smsCnt > 0) {
+ MemberDO memberDO = this.baseMapper.selectById(updateMemberInfoDTO.getId());
+
+ Integer count = this.baseMapper.selectCount(new QueryWrapper()
+ .lambda()
+ .eq(MemberDO::getAcademyId, memberDO.getAcademyId())
+ .eq(MemberDO::getTelephone, updateMemberInfoDTO.getTelephone())
+ .ne(MemberDO::getId, updateMemberInfoDTO.getId())
+ .eq(MemberDO::getMemberType, 0));
+
+ if (count > 0) {
+ throw new HttpException(10003);
+ }
+
+ if (!StringUtils.isEmpty(memberDO.getAliasName())) {
+
+ Integer count1 = this.baseMapper.selectCount(new QueryWrapper()
+ .lambda()
+ .eq(MemberDO::getAliasName, updateMemberInfoDTO.getAliasName())
+ .ne(MemberDO::getId, updateMemberInfoDTO.getId()));
+ if (count1 > 0) {
+ throw new HttpException(50006);
+ }
+ }
+ BeanUtils.copyProperties(updateMemberInfoDTO, memberDO);
+ this.baseMapper.updateById(memberDO);
+
+ //联系方式
+ //新的
+ List showMemberContactsDOS = updateMemberInfoDTO.getMemberContactsDOS();
+//
+// //旧的
+// List methods = showMemberContactsMapper.memberCurrentContacts(updateMemberInfoDTO.getId());
+//
+// List list = showMemberContactsMapper.deleteIds(updateMemberInfoDTO.getId(), updateMemberInfoDTO.getMemberContactsDOS());
+//
+// //将新的加入到
+// for (ShowMemberContactsDO showMemberContactsDO : showMemberContactsDOS){
+// //有的话就更新
+// if (methods.contains(showMemberContactsDO.getContactMethod())){
+// ShowMemberContactsDO showMemberContactsDO1 = showMemberContactsMapper.selectOne(new QueryWrapper()
+// .lambda()
+// .eq(ShowMemberContactsDO::getMemberId,updateMemberInfoDTO.getId())
+// .eq(ShowMemberContactsDO::getContactMethod,showMemberContactsDO.getContactMethod()));
+// showMemberContactsDO1.setImgUrl(showMemberContactsDO.getImgUrl());
+// showMemberContactsMapper.updateById(showMemberContactsDO1);
+// }else {
+// //没有的话就新增
+// showMemberContactsDO.setMemberId(updateMemberInfoDTO.getId());
+// showMemberContactsMapper.insert(showMemberContactsDO);
+// }
+// }
+//
+// //删除旧的
+// list.stream().forEach(x->showMemberContactsMapper.deleteById(x));
+
+ showMemberContactsMapper.delete(new QueryWrapper()
+ .lambda()
+ .eq(ShowMemberContactsDO::getMemberId, updateMemberInfoDTO.getId()));
+ showMemberContactsDOS.stream().forEach(x -> {
+ x.setMemberId(updateMemberInfoDTO.getId());
+ showMemberContactsMapper.insert(x);
+ });
+
+ } else {
+ throw new HttpException(10004);
+ }
+
+ return ConstantUtils.SUCCESS_UPDATE;
+ }
+
+ @Override
+ public String sendMsg(MemberDO memberDO) {
+
+ String verifyCode = RandomUtil.getRandomCode(6);
+ String param = "{ \"code\":\"" + verifyCode + "\"}";
+
+ //插入短信验证码
+ smsVerifyCodeMapper.delete(new QueryWrapper()
+ .lambda()
+ .eq(SmsVerifyCodeDO::getTelephone, memberDO.getTelephone()));
+
+ SmsVerifyCodeDO smsCodeDO = new SmsVerifyCodeDO();
+ smsCodeDO.setTelephone(memberDO.getTelephone());
+ smsCodeDO.setVerifyCode(verifyCode);
+ smsCodeDO.setCreateDate(LocalDateTime.now());
+ smsVerifyCodeMapper.insert(smsCodeDO);
+ return SMSUtils.sendVerifySMS(ConstantUtils.TEMPLATE_CODE, smsCodeDO.getTelephone(), param);
+ }
+}
diff --git a/src/main/java/com/show/service/impl/ShowBannersServiceImpl.java b/src/main/java/com/show/service/impl/ShowBannersServiceImpl.java
new file mode 100644
index 0000000..d6bc3b6
--- /dev/null
+++ b/src/main/java/com/show/service/impl/ShowBannersServiceImpl.java
@@ -0,0 +1,62 @@
+package com.show.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.show.common.constant.BoolFlag;
+import com.show.model.ShowBannersDO;
+import com.show.mapper.ShowBannersMapper;
+import com.show.service.ShowBannersService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.show.util.ConstantUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@Service
+public class ShowBannersServiceImpl extends ServiceImpl implements ShowBannersService {
+
+ @Override
+ public List homePageBanners(ShowBannersDO showBannersDO) {
+ return this.baseMapper.selectList(new QueryWrapper()
+ .lambda()
+ .eq(ShowBannersDO::getShowFlag, BoolFlag.SHI)
+ .eq(ShowBannersDO::getAcademyId,showBannersDO.getAcademyId())
+ .orderByAsc(ShowBannersDO::getOrderNo));
+ }
+
+ @Override
+ public String addBanner(ShowBannersDO showBannersDO) {
+ showBannersDO.setBannerUrl(BoolFlag.FOU);
+ this.baseMapper.insert(showBannersDO);
+ return ConstantUtils.ADD_SUCCESS;
+ }
+
+ @Override
+ public String deleteBanner(ShowBannersDO showBannersDO) {
+ this.baseMapper.deleteById(showBannersDO.getId());
+ return ConstantUtils.DELETE_SUCCESS;
+ }
+
+ @Override
+ public String updateBanner(ShowBannersDO showBannersDO) {
+ this.baseMapper.updateById(showBannersDO);
+ return ConstantUtils.SUCCESS_UPDATE;
+ }
+
+ @Override
+ public List allBanners(ShowBannersDO showBannersDO) {
+ return this.baseMapper.selectList(new QueryWrapper()
+ .lambda()
+ .eq(ShowBannersDO::getAcademyId,showBannersDO.getAcademyId())
+ .orderByAsc(ShowBannersDO::getOrderNo));
+ }
+
+
+}
diff --git a/src/main/java/com/show/service/impl/ShowLabelDictServiceImpl.java b/src/main/java/com/show/service/impl/ShowLabelDictServiceImpl.java
new file mode 100644
index 0000000..beae0d2
--- /dev/null
+++ b/src/main/java/com/show/service/impl/ShowLabelDictServiceImpl.java
@@ -0,0 +1,67 @@
+package com.show.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.show.common.exception.HttpException;
+import com.show.mapper.ShowWorkLabelsMapper;
+import com.show.model.ShowLabelDictDO;
+import com.show.mapper.ShowLabelDictMapper;
+import com.show.model.ShowWorkLabelsDO;
+import com.show.service.ShowLabelDictService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.show.util.ConstantUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@Service
+public class ShowLabelDictServiceImpl extends ServiceImpl implements ShowLabelDictService {
+
+ @Autowired
+ private ShowWorkLabelsMapper showWorkLabelsMapper;
+
+ @Override
+ public String addLabel(ShowLabelDictDO showLabelDictDO) {
+ this.baseMapper.insert(showLabelDictDO);
+ return ConstantUtils.ADD_SUCCESS;
+ }
+
+ @Override
+ public List labels(ShowLabelDictDO showLabelDictDO) {
+ return this.baseMapper.selectList(new QueryWrapper()
+ .lambda()
+ .like(StringUtils.isNotEmpty(showLabelDictDO.getLabel()),ShowLabelDictDO::getLabel,showLabelDictDO.getLabel())
+ .eq(ShowLabelDictDO::getAcademyId,showLabelDictDO.getAcademyId()));
+ }
+
+ @Override
+ public String deleteLabel(ShowLabelDictDO showLabelDictDO) {
+
+ // 当前没有展品关联到这个标签
+ int count = showWorkLabelsMapper.selectCount(new QueryWrapper()
+ .lambda()
+ .eq(ShowWorkLabelsDO::getLabelId,showLabelDictDO.getId()));
+
+ if (count > 0){
+ throw new HttpException(10001);
+ }
+
+ this.baseMapper.deleteById(showLabelDictDO.getId());
+ return ConstantUtils.DELETE_SUCCESS;
+ }
+
+ @Override
+ public String updateLabel(ShowLabelDictDO showLabelDictDO) {
+ this.baseMapper.updateById(showLabelDictDO);
+ return ConstantUtils.SUCCESS_UPDATE;
+ }
+}
diff --git a/src/main/java/com/show/service/impl/ShowMemberContactsServiceImpl.java b/src/main/java/com/show/service/impl/ShowMemberContactsServiceImpl.java
new file mode 100644
index 0000000..8cf1791
--- /dev/null
+++ b/src/main/java/com/show/service/impl/ShowMemberContactsServiceImpl.java
@@ -0,0 +1,60 @@
+package com.show.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.show.common.exception.HttpException;
+import com.show.model.ShowMemberContactsDO;
+import com.show.mapper.ShowMemberContactsMapper;
+import com.show.service.ShowMemberContactsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.show.util.ConstantUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *
+ * 学生联系方式表 服务实现类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-26
+ */
+@Service
+public class ShowMemberContactsServiceImpl extends ServiceImpl implements ShowMemberContactsService {
+
+ @Override
+ public List memberContacts(ShowMemberContactsDO showMemberContactsDO) {
+ return this.baseMapper.selectList(new QueryWrapper()
+ .lambda()
+ .eq(ShowMemberContactsDO::getMemberId,showMemberContactsDO.getMemberId()));
+ }
+
+ @Override
+ public String addContact(ShowMemberContactsDO showMemberContactsDO) {
+
+ //查看当前这个人是否有这个联系方式
+ int count = this.baseMapper.selectCount(new QueryWrapper()
+ .lambda()
+ .eq(ShowMemberContactsDO::getContactMethod,showMemberContactsDO.getContactMethod())
+ .eq(ShowMemberContactsDO::getMemberId,showMemberContactsDO.getMemberId()));
+
+ if (count > 0){
+ throw new HttpException(10002);
+ }
+
+ this.baseMapper.insert(showMemberContactsDO);
+ return ConstantUtils.ADD_SUCCESS;
+ }
+
+ @Override
+ public String deleteContact(ShowMemberContactsDO showMemberContactsDO) {
+ this.baseMapper.deleteById(showMemberContactsDO.getId());
+ return ConstantUtils.DELETE_SUCCESS;
+ }
+
+ @Override
+ public String updateContact(ShowMemberContactsDO showMemberContactsDO) {
+ this.baseMapper.updateById(showMemberContactsDO);
+ return ConstantUtils.SUCCESS_UPDATE;
+ }
+}
diff --git a/src/main/java/com/subsidy/service/impl/AdministerServiceImpl.java b/src/main/java/com/show/service/impl/ShowWorkLabelsServiceImpl.java
similarity index 61%
rename from src/main/java/com/subsidy/service/impl/AdministerServiceImpl.java
rename to src/main/java/com/show/service/impl/ShowWorkLabelsServiceImpl.java
index ff3c5fc..a75ce6e 100644
--- a/src/main/java/com/subsidy/service/impl/AdministerServiceImpl.java
+++ b/src/main/java/com/show/service/impl/ShowWorkLabelsServiceImpl.java
@@ -1,20 +1,20 @@
-package com.subsidy.service.impl;
+package com.show.service.impl;
-import com.subsidy.model.AdministerDO;
-import com.subsidy.mapper.AdministerMapper;
-import com.subsidy.service.AdministerService;
+import com.show.model.ShowWorkLabelsDO;
+import com.show.mapper.ShowWorkLabelsMapper;
+import com.show.service.ShowWorkLabelsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
*
- * 管理平台用户 服务实现类
+ * 服务实现类
*
*
* @author Tuyp
* @since 2025-11-25
*/
@Service
-public class AdministerServiceImpl extends ServiceImpl implements AdministerService {
+public class ShowWorkLabelsServiceImpl extends ServiceImpl implements ShowWorkLabelsService {
}
diff --git a/src/main/java/com/show/service/impl/ShowWorksServiceImpl.java b/src/main/java/com/show/service/impl/ShowWorksServiceImpl.java
new file mode 100644
index 0000000..9926221
--- /dev/null
+++ b/src/main/java/com/show/service/impl/ShowWorksServiceImpl.java
@@ -0,0 +1,258 @@
+package com.show.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.show.common.constant.*;
+import com.show.dto.member.CreatorsDTO;
+import com.show.dto.work.MemberWorksDTO;
+import com.show.dto.work.MyWorksDTO;
+import com.show.dto.work.PageWorksDTO;
+import com.show.dto.work.SubmitWorkDTO;
+import com.show.mapper.ShowWorkLabelsMapper;
+import com.show.mapper.WorkflowInstanceMapper;
+import com.show.model.*;
+import com.show.mapper.ShowWorksMapper;
+import com.show.service.ShowWorksService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.show.service.WorkflowService;
+import com.show.util.ConstantUtils;
+import com.show.util.DateUtil;
+import com.show.vo.work.*;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-11-25
+ */
+@Service
+public class ShowWorksServiceImpl extends ServiceImpl implements ShowWorksService {
+
+ @Autowired
+ private ShowWorkLabelsMapper showWorkLabelsMapper;
+
+ @Autowired
+ private WorkflowService workflowService;
+
+ @Autowired
+ private WorkflowInstanceMapper workflowInstanceMapper;
+
+ @Override
+ public List hotSpotWorks(MemberDO memberDO) {
+ return this.baseMapper.hotSpotWorks(memberDO.getAcademyId());
+ }
+
+ @Override
+ public IPage pageWorks(PageWorksDTO pageWorksDTO) {
+ Page pager = new Page(pageWorksDTO.getPageNum(), pageWorksDTO.getPageSize());
+ return this.baseMapper.pageWorks(pager,pageWorksDTO.getLabelId(),pageWorksDTO.getAcademyId(),pageWorksDTO.getTitle());
+ }
+
+ @Override
+ public OneWorkVO oneWork(ShowWorksDO showWorksDO) {
+ OneWorkVO oneWorkVO = this.baseMapper.oneWork(showWorksDO.getId());
+ //标签
+ List showLabelDictDOS = this.baseMapper.workLabels(showWorksDO.getId());
+ oneWorkVO.setShowLabelDictDOS(showLabelDictDOS);
+ return oneWorkVO;
+ }
+
+ @Override
+ public IPage memberWorks(MemberWorksDTO memberWorksDTO) {
+ Page pager = new Page(memberWorksDTO.getPageNum(), memberWorksDTO.getPageSize());
+ return this.baseMapper.memberWorks(pager,memberWorksDTO.getMemberId());
+ }
+
+ @Override
+ public IPage myWorks(MyWorksDTO myWorksDTO) {
+ Page pager = new Page(myWorksDTO.getPageNum(), myWorksDTO.getPageSize());
+ IPage myWorksVOIPage = this.baseMapper.myWorks(pager, myWorksDTO.getMemberId(), myWorksDTO.getSubmitStatus());
+ List myWorksVOS = myWorksVOIPage.getRecords();
+
+ myWorksVOS.stream().forEach(x->{
+ List showLabelDictDOS = this.baseMapper.workLabels(x.getId());
+ x.setShowLabelDictDOS(showLabelDictDOS);
+ });
+
+ return myWorksVOIPage;
+ }
+
+ @Override
+ public MyWorksOverviewVO myWorksOverview(MyWorksDTO myWorksDTO) {
+
+ MyWorksOverviewVO myWorksOverviewVO = new MyWorksOverviewVO();
+
+ myWorksDTO.setPageNum(1);
+ myWorksDTO.setPageSize(-1);
+ List myWorksVOS = myWorks(myWorksDTO).getRecords();
+
+ int passCnt = 0 ;
+ int toCheckCnt = 0 ;
+
+ for (MyWorksVO myWorksVO : myWorksVOS){
+ if (SubmitStatus.PASS.equals(myWorksVO.getSubmitStatus()) && ShowStatus.PUBLISH.equals(myWorksVO.getShowStatus())){
+ passCnt ++;
+ }else if (SubmitStatus.REJECT.equals(myWorksVO.getSubmitStatus())||SubmitStatus.TO_REVIEW.equals(myWorksDTO.getSubmitStatus())){
+ toCheckCnt++;
+ }
+ }
+ myWorksOverviewVO.setTotalCnt(myWorksVOS.size());
+ myWorksOverviewVO.setPassCnt(passCnt);
+ myWorksOverviewVO.setToCheckCnt(toCheckCnt);
+ return myWorksOverviewVO;
+ }
+
+ @Override
+ public String hideWork(ShowWorksDO showWorksDO) {
+ showWorksDO.setShowStatus(ShowStatus.HIDDEN);
+ this.baseMapper.updateById(showWorksDO);
+ return ConstantUtils.SUCCESS_UPDATE;
+ }
+
+ @Override
+ public IPage creators(CreatorsDTO creatorsDTO) {
+
+ Page pager = new Page(creatorsDTO.getPageNum(), creatorsDTO.getPageSize());
+
+ IPage creators = this.baseMapper.creators(pager, creatorsDTO.getAcademyId(), creatorsDTO.getAliasName());
+
+ List creatorsVOS = creators.getRecords();
+ creatorsVOS.stream().forEach(x->{
+ //这个人的作品 倒序
+ List pageWorksVOS = this.baseMapper.memberWorksWithoutPage(x.getId());
+ x.setWorkCnt(pageWorksVOS.size());
+ x.setPageWorksVOS(pageWorksVOS);
+ });
+ return creators;
+ }
+
+ @Override
+ public String showWork(ShowWorksDO showWorksDO) {
+ showWorksDO.setShowStatus(ShowStatus.PUBLISH);
+ this.baseMapper.updateById(showWorksDO);
+ return ConstantUtils.SUCCESS_UPDATE;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String submitWork(SubmitWorkDTO submitWorkDTO) {
+
+ WorkflowInstance workflowInstance = new WorkflowInstance();
+ if (null == submitWorkDTO.getInstanceId()) {
+ //第一次提交
+ workflowInstance = workflowService.startWorkflow(submitWorkDTO.getMemberId(), ApplyType.NEW_SHOW, AssigneeType.STUDENT);
+
+ ShowWorksDO showWorksDO = new ShowWorksDO();
+ BeanUtils.copyProperties(submitWorkDTO,showWorksDO);
+ showWorksDO.setSubmitStatus(SubmitStatus.TO_REVIEW);
+ showWorksDO.setSubmitDate(DateUtil.currentTime());
+ showWorksDO.setViewCnt(0);
+ showWorksDO.setHotSpot(BoolFlag.FOU);
+ showWorksDO.setInstanceId(workflowInstance.getId());
+ showWorksDO.setNewStatus(ApplyType.NEW_SHOW);
+ this.baseMapper.insert(showWorksDO);
+
+ //标签
+ submitWorkDTO.getLabelIds().stream().forEach(x->{
+ ShowWorkLabelsDO showWorkLabelsDO = new ShowWorkLabelsDO();
+ showWorkLabelsDO.setWorkId(showWorksDO.getId());
+ showWorkLabelsDO.setLabelId(x);
+ showWorkLabelsMapper.insert(showWorkLabelsDO);
+ });
+
+ } else {
+
+ showWorkLabelsMapper.delete(new QueryWrapper()
+ .lambda()
+ .eq(ShowWorkLabelsDO::getWorkId,submitWorkDTO.getId()));
+
+ //标签
+ submitWorkDTO.getLabelIds().stream().forEach(x->{
+ ShowWorkLabelsDO showWorkLabelsDO = new ShowWorkLabelsDO();
+ showWorkLabelsDO.setWorkId(submitWorkDTO.getId());
+ showWorkLabelsDO.setLabelId(x);
+ showWorkLabelsMapper.insert(showWorkLabelsDO);
+ });
+
+ //查看当前状态 只要不是已通过的话 就不修改newStatus的状态
+ ShowWorksDO showWorksDO = this.baseMapper.selectById(submitWorkDTO.getId());
+ if (SubmitStatus.PASS.equals(showWorksDO.getSubmitStatus())){
+ //已通过,修改newStatus的状态
+ this.baseMapper.updateSubmitWork(submitWorkDTO.getId(),submitWorkDTO.getHomePage(),submitWorkDTO.getWorks(),submitWorkDTO.getWorkDesc(),ApplyType.UPDATE_SHOW);
+ }else {
+ this.baseMapper.updateSubmitWork(submitWorkDTO.getId(),submitWorkDTO.getHomePage(),submitWorkDTO.getWorks(),submitWorkDTO.getWorkDesc(),null);
+ }
+
+ //被驳回后提交
+ workflowInstance = workflowService.rejectWorkflow(submitWorkDTO.getInstanceId(), submitWorkDTO.getMemberId(), ApplyType.NEW_SHOW, AssigneeType.STUDENT);
+ workflowInstance.setStatus(WorkflowInstanceStatus.DOING);
+ if (SubmitStatus.PASS.equals(showWorksDO.getSubmitStatus())){
+ workflowInstance.setApplyType(ApplyType.UPDATE_SHOW);
+ }
+ workflowInstanceMapper.updateById(workflowInstance);
+
+ }
+
+ return ConstantUtils.ADD_SUCCESS;
+ }
+
+ @Override
+ public String updateWork(SubmitWorkDTO submitWorkDTO) {
+
+// //将之前的置为已结束
+// this.baseMapper.finishWork(submitWorkDTO.getId());
+
+ WorkflowInstance workflowInstance = new WorkflowInstance();
+ if (null == submitWorkDTO.getInstanceId()) {
+ //第一次提交
+ workflowInstance = workflowService.startWorkflow(submitWorkDTO.getMemberId(), ApplyType.UPDATE_SHOW, AssigneeType.STUDENT);
+ } else {
+ //被驳回后提交
+ workflowInstance = workflowService.rejectWorkflow(submitWorkDTO.getInstanceId(), submitWorkDTO.getMemberId(), ApplyType.UPDATE_SHOW, AssigneeType.STUDENT);
+ workflowInstance.setStatus(WorkflowInstanceStatus.DOING);
+ workflowInstanceMapper.updateById(workflowInstance);
+ }
+
+ ShowWorksDO showWorksDO = new ShowWorksDO();
+ BeanUtils.copyProperties(submitWorkDTO,showWorksDO);
+ showWorksDO.setSubmitStatus(SubmitStatus.TO_REVIEW);
+ showWorksDO.setSubmitDate(DateUtil.currentTime());
+ showWorksDO.setViewCnt(0);
+ showWorksDO.setHotSpot(BoolFlag.FOU);
+ showWorksDO.setInstanceId(workflowInstance.getId());
+ this.baseMapper.insert(showWorksDO);
+
+ //标签
+ submitWorkDTO.getLabelIds().stream().forEach(x->{
+ ShowWorkLabelsDO showWorkLabelsDO = new ShowWorkLabelsDO();
+ showWorkLabelsDO.setWorkId(showWorksDO.getId());
+ showWorkLabelsDO.setLabelId(x);
+ showWorkLabelsMapper.insert(showWorkLabelsDO);
+ });
+
+ return ConstantUtils.SUCCESS_UPDATE;
+ }
+
+ @Override
+ public String addViewCnt(ShowWorksDO showWorksDO) {
+
+ ShowWorksDO showWorksDO1 = this.baseMapper.selectById(showWorksDO.getId());
+ if (null == showWorksDO1.getViewCnt()){
+ showWorksDO1.setViewCnt(1);
+ }else {
+ showWorksDO1.setViewCnt(showWorksDO1.getViewCnt()+1);
+ }
+
+ this.baseMapper.updateById(showWorksDO1);
+ return ConstantUtils.SUCCESS_UPDATE;
+ }
+}
diff --git a/src/main/java/com/show/service/impl/SmsVerifyCodeServiceImpl.java b/src/main/java/com/show/service/impl/SmsVerifyCodeServiceImpl.java
new file mode 100644
index 0000000..1cd5d21
--- /dev/null
+++ b/src/main/java/com/show/service/impl/SmsVerifyCodeServiceImpl.java
@@ -0,0 +1,20 @@
+package com.show.service.impl;
+
+import com.show.model.SmsVerifyCodeDO;
+import com.show.mapper.SmsVerifyCodeMapper;
+import com.show.service.SmsVerifyCodeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 短信验证码记录表 服务实现类
+ *
+ *
+ * @author Tuyp
+ * @since 2025-12-15
+ */
+@Service
+public class SmsVerifyCodeServiceImpl extends ServiceImpl implements SmsVerifyCodeService {
+
+}
diff --git a/src/main/java/com/show/service/impl/WorkflowServiceImpl.java b/src/main/java/com/show/service/impl/WorkflowServiceImpl.java
new file mode 100644
index 0000000..3a38ba3
--- /dev/null
+++ b/src/main/java/com/show/service/impl/WorkflowServiceImpl.java
@@ -0,0 +1,567 @@
+package com.show.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.show.common.constant.*;
+import com.show.common.exception.HttpException;
+import com.show.dto.work.WorkflowHistory;
+import com.show.mapper.*;
+import com.show.model.*;
+import com.show.service.WorkflowService;
+import com.show.util.ConstantUtils;
+import com.show.util.DateFormatUtil;
+import com.show.util.DateUtil;
+import com.show.vo.administer.NamesVO;
+import com.show.vo.work.GetWorkflowHistoryVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.*;
+
+@Service
+public class WorkflowServiceImpl implements WorkflowService {
+
+ @Autowired
+ private WorkflowNodeMapper workflowNodeMapper;
+
+ @Autowired
+ private WorkflowInstanceMapper workflowInstanceMapper;
+
+ @Autowired
+ private WorkflowTaskMapper workflowTaskMapper;
+
+ @Autowired
+ private AcademyPermissionMappingMapper academyPermissionMappingMapper;
+
+ @Autowired
+ private MemberMapper memberMapper;
+
+ @Autowired
+ private AdministerMapper administerMapper;
+
+ @Autowired
+ private AcademyRoleDictMapper academyRoleDictMapper;
+
+ @Override
+ @Transactional
+ public String reject(Long taskId, String assignee, String approveOpinion) {
+
+ WorkflowTask task = workflowTaskMapper.selectById(taskId);
+ if (task == null || !task.getAssignee().equals(Long.valueOf(assignee)) || !WorkflowTaskStatus.TODO.equals(task.getStatus())) {
+ throw new RuntimeException("任务不存在或状态异常");
+ }
+
+ // 更新任务状态
+ task.setStatus(WorkflowTaskStatus.REJECT); // 驳回中
+ task.setApproveOpinion(approveOpinion);
+ task.setEndTime(DateFormatUtil.format(new Date(), DateFormatUtil.FMT_sdf14_L24));
+ task.setAssignee(Long.valueOf(assignee));
+ task.setCheckId(Long.valueOf(assignee));
+ workflowTaskMapper.updateById(task);
+
+ // 记录历史
+ WorkflowInstance instance = workflowInstanceMapper.selectById(task.getInstanceId());
+ WorkflowNode currentNode = workflowNodeMapper.selectById(task.getNodeId());
+ instance.setStatus(WorkflowInstanceStatus.REJECTING);
+ workflowInstanceMapper.updateById(instance);
+
+// // 查找目标节点
+// WorkflowNode targetWorkflowNode = nodeMapper.selectOne(new QueryWrapper()
+// .lambda()
+// .eq(WorkflowNode::getWorkflowId, instance.getWorkflowId())
+// .eq(WorkflowNode::getNodeKey, rejectDTO.getTargetNode()));
+//
+// if (targetWorkflowNode == null) {
+// throw new RuntimeException("目标节点不存在");
+// }
+
+ // 清除当前活动任务
+ clearActiveTasks(instance.getId(), currentNode.getId());
+
+// // 创建目标节点任务
+// createTasks(instance.getId(), targetWorkflowNode.getId(), null);
+
+ return ConstantUtils.SUCCESS_REJECT;
+ }
+
+ @Override
+ public List getWorkflowHistory(WorkflowHistory workflowHistory) {
+
+ List result = workflowTaskMapper.updatedWorks(workflowHistory.getInstanceId());
+ for (GetWorkflowHistoryVO getWorkflowHistoryVO : result){
+
+ //找到节点对应的所有审批人
+
+ WorkflowNode workflowNode = workflowNodeMapper.selectById(getWorkflowHistoryVO.getNodeId());
+
+ List checkers = new ArrayList<>();
+
+ if (AssigneeType.USER.equals(getWorkflowHistoryVO.getAssigneeType())) {
+ List split = Arrays.asList(workflowNode.getApproveConfig().split(","));
+ List names = administerMapper.names(split);
+ for (NamesVO namesVO : names) {
+ checkers.add(namesVO.getName());
+ }
+ getWorkflowHistoryVO.setCheckers(checkers);
+ } else if (AssigneeType.ROLE.equals(getWorkflowHistoryVO.getAssigneeType())) {
+ String[] split = workflowNode.getApproveConfig().split(",");
+ for (String str : split) {
+ AcademyRoleDictDO academyRoleDictDO = academyRoleDictMapper.selectById(str);
+ checkers.add(academyRoleDictDO.getRole());
+ getWorkflowHistoryVO.setCheckers(checkers);
+ }
+ } else if (AssigneeType.STUDENT.equals(getWorkflowHistoryVO.getAssigneeType())) {
+ MemberDO memberDO = memberMapper.selectById(getWorkflowHistoryVO.getAssignee());
+ checkers.add(memberDO.getUserName());
+ getWorkflowHistoryVO.setCheckers(checkers);
+ } else {
+ AdministerDO administerDO = administerMapper.selectById(getWorkflowHistoryVO.getAssignee());
+ checkers.add(administerDO.getUserName());
+ getWorkflowHistoryVO.setCheckers(checkers);
+ }
+
+ //谁审批的
+ String operator = administerMapper.administerName(getWorkflowHistoryVO.getCheckId());
+ getWorkflowHistoryVO.setOperator(operator);
+
+ }
+
+ return result;
+ }
+
+ @Override
+ public String updateWorkTaskStatus(Long instanceId) {
+
+ //审批里置为进行中
+ WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId);
+ instance.setStatus(WorkflowInstanceStatus.DOING);
+ workflowInstanceMapper.updateById(instance);
+
+ WorkflowNode workflowNode = workflowNodeMapper.selectById(instance.getCurrentNode());
+
+ //老师的任务重新造记录
+ createTasks(instance.getId(), instance.getWorkflowId(), workflowNode.getNodeKey(), workflowNode.getVersionCode());
+
+ return ConstantUtils.COMMIT_SUCCESS;
+ }
+
+ @Override
+ public List getActiveTasks(WorkflowHistory workflowHistory) {
+ return workflowTaskMapper.selectList(new QueryWrapper()
+ .lambda()
+ .eq(WorkflowTask::getInstanceId, workflowHistory.getInstanceId())
+ .eq(WorkflowTask::getStatus, 1) //待处理
+ .orderByAsc(WorkflowTask::getCreateDate));
+ }
+
+ @Override
+ public WorkflowInstance getWorkflowInstance(WorkflowHistory workflowHistory) {
+ return workflowInstanceMapper.selectById(workflowHistory.getId());
+ }
+
+ /**
+ * 通过 返回是否是最后一个节点
+ */
+ public Boolean orHandlePass(Long instanceId, Integer role, Long userId, String opinion) {
+ Boolean flag = false;
+ //审批流处理== 通过
+ WorkflowNode workflowNode = workflowInstanceMapper.instanceCurrentNode(instanceId);
+ //1.获取当前节点是由角色还是用户审批
+ if (AssigneeType.USER.equals(workflowNode.getApproveType())) {
+ //用户
+ WorkflowTask workflowTask = workflowTaskMapper.selectOne(new QueryWrapper()
+ .lambda()
+ .eq(WorkflowTask::getAssigneeType, AssigneeType.USER)
+ .eq(WorkflowTask::getInstanceId, instanceId)
+ .eq(WorkflowTask::getNodeId, workflowNode.getId())
+ .eq(WorkflowTask::getAssignee, userId)
+ .eq(WorkflowTask::getStatus, WorkflowTaskStatus.TODO));
+ workflowTask.setStatus(WorkflowTaskStatus.DONE); // 已通过
+ workflowTask.setEndTime(DateFormatUtil.format(new Date(), DateFormatUtil.FMT_sdf14_L24));
+ workflowTask.setCheckId(userId);
+ workflowTask.setApproveOpinion(opinion);
+ workflowTaskMapper.updateById(workflowTask);
+ // 该人不在的改为已结束
+ List others = workflowTaskMapper.selectList(new QueryWrapper()
+ .lambda()
+ .eq(WorkflowTask::getAssigneeType, AssigneeType.USER)
+ .eq(WorkflowTask::getInstanceId, instanceId)
+ .eq(WorkflowTask::getNodeId, workflowNode.getId())
+ .ne(WorkflowTask::getAssignee, userId)
+ .eq(WorkflowTask::getStatus, WorkflowTaskStatus.TODO));
+ for (WorkflowTask other : others) {
+ other.setStatus(WorkflowTaskStatus.CANCEL);
+ workflowTaskMapper.updateById(other);
+ }
+// //审批通过
+// this.approve(workflowTask.getId(), String.valueOf(userId), null);
+ } else {
+ //角色---> 将该节点所有成员出现的角色置为已处理,再流转到下个节点
+ List workflowTasks = workflowTaskMapper.administerRoleTasks(userId, instanceId, workflowNode.getId(), role);
+ for (WorkflowTask workflowTask : workflowTasks) {
+ // 更新任务状态
+ workflowTask.setStatus(WorkflowTaskStatus.DONE); // 已通过
+ workflowTask.setEndTime(DateFormatUtil.format(new Date(), DateFormatUtil.FMT_sdf14_L24));
+ workflowTask.setCheckId(userId);
+ workflowTask.setApproveOpinion(opinion);
+ workflowTaskMapper.updateById(workflowTask);
+ }
+ // 该人不在的角色改为已结束
+ List workflowTasks1 = workflowTaskMapper.administerNotInRoleTask(role, userId, instanceId, workflowNode.getId());
+ for (WorkflowTask workflowTask : workflowTasks1) {
+ workflowTask.setStatus(WorkflowTaskStatus.CANCEL);
+ workflowTaskMapper.updateById(workflowTask);
+ }
+ }
+ /**
+ * 判断是否是最后一个节点
+ */
+ WorkflowInstance workflowInstance = workflowInstanceMapper.selectById(instanceId);
+ WorkflowNode currentNode = workflowNodeMapper.selectById(workflowInstance.getCurrentNode());
+ // 获取下一个节点
+ String nextNodeKey = currentNode.getNextNode();
+
+ WorkflowNode nextNode = workflowNodeMapper.selectOne(new QueryWrapper()
+ .lambda()
+ .eq(WorkflowNode::getWorkflowId, workflowInstance.getWorkflowId())
+ .eq(WorkflowNode::getNodeKey, nextNodeKey)
+ .eq(WorkflowNode::getVersionCode, workflowInstance.getVersionCode()));
+
+ //下一个节点流存在 创建节点流
+ if (nextNode != null) {
+ workflowInstance.setCurrentNode(nextNode.getId());
+ workflowInstanceMapper.updateById(workflowInstance);
+ this.createTasks(workflowInstance.getId(), workflowInstance.getWorkflowId(), nextNode.getNodeKey(), workflowNode.getVersionCode());
+ } else {
+ flag = true;
+ // 如果是结束节点,更新实例状态
+ workflowInstance.setStatus(WorkflowInstanceStatus.DONE); // 已完成
+ workflowInstance.setFinishTime(new Date());
+ workflowInstanceMapper.updateById(workflowInstance);
+ }
+ return flag;
+ }
+
+ public void orHandleReject(Long instanceId, Integer role, Long userId, String approveOpinion) {
+
+ //审批流处理==
+ WorkflowNode workflowNode = workflowInstanceMapper.instanceCurrentNode(instanceId);
+ //1.获取当前节点是由角色还是用户审批
+ if (AssigneeType.USER.equals(workflowNode.getApproveType())) {
+ //用户
+ WorkflowTask workflowTask = workflowTaskMapper.selectOne(new QueryWrapper()
+ .lambda()
+ .eq(WorkflowTask::getAssigneeType, AssigneeType.USER)
+ .eq(WorkflowTask::getInstanceId, instanceId)
+ .eq(WorkflowTask::getNodeId, workflowNode.getId())
+ .eq(WorkflowTask::getAssignee, userId)
+ .eq(WorkflowTask::getStatus, WorkflowTaskStatus.TODO));
+ //审批
+ this.reject(workflowTask.getId(), String.valueOf(userId), approveOpinion);
+ } else {
+ //角色---> 将该节点所有成员出现的角色置为驳回中,再流转到下个节点
+ List workflowTasks = workflowTaskMapper.administerRoleTasks(userId, instanceId, workflowNode.getId(), role);
+ for (WorkflowTask workflowTask : workflowTasks) {
+ // 更新任务状态
+ workflowTask.setStatus(WorkflowTaskStatus.REJECT); // 驳回中
+ workflowTask.setApproveOpinion(approveOpinion);
+ workflowTask.setEndTime(DateFormatUtil.format(new Date(), DateFormatUtil.FMT_sdf14_L24));
+ workflowTask.setCheckId(userId);
+ workflowTaskMapper.updateById(workflowTask);
+ }
+
+ WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId);
+ instance.setStatus(WorkflowInstanceStatus.REJECTING);
+ workflowInstanceMapper.updateById(instance);
+
+ // 该人不在的角色改为已结束
+ List workflowTasks1 = workflowTaskMapper.administerNotInRoleTask(role, userId, instanceId, workflowNode.getId());
+ for (WorkflowTask workflowTask : workflowTasks1) {
+ workflowTask.setStatus(WorkflowTaskStatus.CANCEL);
+ workflowTaskMapper.updateById(workflowTask);
+ }
+ }
+ }
+
+ /**
+ * 创建任务
+ *
+ * @param instanceId
+ * @param mappingId
+ * @param nodeKey workflow_node的 nodeKey
+ */
+ public void createTasks(Long instanceId, Long mappingId, String nodeKey, Integer versionCode) {
+
+ //查询节点
+ WorkflowNode node = workflowNodeMapper.selectOne(new QueryWrapper()
+ .lambda()
+ .eq(WorkflowNode::getWorkflowId, mappingId)
+ .eq(WorkflowNode::getVersionCode, versionCode)
+ .eq(WorkflowNode::getNodeKey, nodeKey));
+ if (node == null) {
+ throw new RuntimeException("节点不存在");
+ }
+
+ // 根据节点配置创建任务
+ if (AssigneeType.ROLE.equals(node.getApproveType())) { // 角色审批
+ // 从approveConfig中获取角色ID列表
+ String[] roleIds = node.getApproveConfig().split(",");
+ for (String roleId : roleIds) {
+ // 这里需要根据角色ID获取用户列表,简化处理直接创建任务
+ WorkflowTask task = new WorkflowTask();
+ task.setInstanceId(instanceId);
+ task.setNodeId(node.getId());
+ task.setNodeKey(node.getNodeKey());
+ task.setNodeName(TaskType.CHECK);
+ task.setAssignee(Long.valueOf(roleId));
+ task.setAssigneeType(AssigneeType.ROLE); // 角色
+ task.setStatus(WorkflowTaskStatus.TODO); // 待处理
+ workflowTaskMapper.insert(task);
+ }
+ } else if (AssigneeType.USER.equals(node.getApproveType())) { // 用户审批
+ // 从approveConfig中获取用户ID列表
+ String[] userIds = node.getApproveConfig().split(",");
+
+// //若同一审批人在流程中重复出现,默认只审批一次---->上个节点这个人审批过(指定用户情况,可多个),下个节点只有他自己的话,则直接跳过
+// if (userIds.length == 1) {
+// int count = workflowTaskMapper.selectCount(new QueryWrapper()
+// .lambda()
+// .eq(WorkflowTask::getInstanceId, instanceId)
+// .eq(WorkflowTask::getAssignee, userIds[0])
+// .eq(WorkflowTask::getStatus, WorkflowTaskStatus.DONE));
+// if (count > 0) {
+// //当前审批 之前这个人已经审批通过了,直接跳过
+// WorkflowTask task = new WorkflowTask();
+// task.setInstanceId(instanceId);
+// task.setNodeId(node.getId());
+// task.setNodeKey(node.getNodeKey());
+// task.setNodeName(TaskType.CHECK);
+// task.setAssignee(Long.valueOf(userIds[0]));
+// task.setAssigneeType(AssigneeType.USER); // 用户
+// task.setStatus(WorkflowTaskStatus.DONE); // 已处理
+// workflowTaskMapper.insert(task);
+//
+// //查询下个结点,创建新的审批工作
+// createTasks(instanceId, mappingId, node.getNextNode(), versionCode);
+// }
+// }
+
+ for (String userId : userIds) {
+ WorkflowTask task = new WorkflowTask();
+ task.setInstanceId(instanceId);
+ task.setNodeId(node.getId());
+ task.setNodeKey(node.getNodeKey());
+ task.setNodeName(TaskType.CHECK);
+ task.setAssignee(Long.valueOf(userId));
+ task.setAssigneeType(AssigneeType.USER); // 用户
+ task.setStatus(WorkflowTaskStatus.TODO); // 待处理
+ workflowTaskMapper.insert(task);
+ }
+ }
+ }
+
+ /**
+ * 创建下一个节点的任务
+ */
+ private void createNextTasks(WorkflowInstance instance, WorkflowNode currentNode, Integer versionCode) {
+ // 获取下一个节点
+ String nextNodeKey = currentNode.getNextNode();
+
+ WorkflowNode nextNode = workflowNodeMapper.selectOne(new QueryWrapper()
+ .lambda()
+ .eq(WorkflowNode::getWorkflowId, instance.getWorkflowId())
+ .eq(WorkflowNode::getVersionCode, versionCode)
+ .eq(WorkflowNode::getNodeKey, nextNodeKey));
+
+ //下一个节点流存在 创建节点流
+ if (nextNode != null) {
+ instance.setCurrentNode(nextNode.getId());
+ workflowInstanceMapper.updateById(instance);
+ createTasks(instance.getId(), instance.getWorkflowId(), nextNode.getNodeKey(), versionCode);
+ } else {
+ // 如果是结束节点,更新实例状态
+ instance.setStatus(WorkflowInstanceStatus.DONE); // 已完成
+ instance.setFinishTime(new Date());
+ workflowInstanceMapper.updateById(instance);
+ }
+ }
+
+// /**
+// * 处理会签节点
+// */
+// private void handleSignTask(Long instanceId, Long nodeId, boolean isApprove) {
+// // 查询当前节点所有任务
+// List tasks = workflowTaskMapper.selectList(new QueryWrapper()
+// .lambda()
+// .eq(WorkflowTask::getInstanceId, instanceId)
+// .eq(WorkflowTask::getNodeId, nodeId));
+//
+// // 统计已处理任务
+// long processedCount = tasks.stream()
+// .filter(t -> WorkflowTaskStatus.DONE.equals(t.getStatus()) || WorkflowTaskStatus.REJECT.equals(t.getStatus()))
+// .count();
+//
+// // 如果有驳回,直接驳回
+// if (!isApprove) {
+// // 清除当前活动任务
+// clearActiveTasks(instanceId, nodeId);
+// // 创建驳回任务(简化处理,直接结束流程)
+// WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId);
+// instance.setStatus(WorkflowInstanceStatus.END); // 已终止
+// instance.setFinishTime(new Date());
+// workflowInstanceMapper.updateById(instance);
+// return;
+// }
+//
+// // 如果所有任务都已处理,继续下一个节点
+// if (processedCount == tasks.size()) {
+// WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId);
+// WorkflowNode currentNode = workflowNodeMapper.selectById(nodeId);
+// createNextTasks(instance, currentNode);
+// }
+// }
+
+ /**
+ * 处理或签节点
+ */
+ private void handleOrSignTask(Long instanceId, Long nodeId, boolean isApprove, Integer versionCode) {
+ if (isApprove) {
+ // 只要有一个通过,就清除其他任务,继续下一个节点
+ clearActiveTasks(instanceId, nodeId);
+ WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId);
+ WorkflowNode currentNode = workflowNodeMapper.selectById(nodeId);
+ createNextTasks(instance, currentNode, versionCode);
+ } else {
+ // 查询当前节点所有任务
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("instance_id", instanceId)
+ .eq("node_id", nodeId);
+ List tasks = workflowTaskMapper.selectList(queryWrapper);
+
+ // 统计已处理任务
+ long processedCount = tasks.stream()
+ .filter(t -> WorkflowTaskStatus.DONE.equals(t.getStatus()) || WorkflowTaskStatus.REJECT.equals(t.getStatus()))
+ .count();
+
+ // 如果所有任务都驳回中,结束流程
+ if (processedCount == tasks.size()) {
+ WorkflowInstance instance = workflowInstanceMapper.selectById(instanceId);
+ instance.setStatus(WorkflowInstanceStatus.END); // 已终止
+ instance.setFinishTime(new Date());
+ workflowInstanceMapper.updateById(instance);
+ }
+ }
+ }
+
+ /**
+ * 清除当前活动任务 或签 or 驳回
+ */
+ private void clearActiveTasks(Long instanceId, Long nodeId) {
+
+ // 待处理
+ List activeTasks = workflowTaskMapper.selectList(new QueryWrapper()
+ .lambda()
+ .eq(WorkflowTask::getInstanceId, instanceId)
+ .eq(WorkflowTask::getNodeId, nodeId)
+ .eq(WorkflowTask::getStatus, WorkflowTaskStatus.TODO));
+
+ //或签---清除该任务下其他用户的审批操作
+ for (WorkflowTask task : activeTasks) {
+ task.setStatus(WorkflowTaskStatus.CANCEL); // 已结束
+ task.setEndTime(DateFormatUtil.format(new Date(), DateFormatUtil.FMT_sdf14_L24));
+ workflowTaskMapper.updateById(task);
+ }
+ }
+
+// /**
+// * 记录历史
+// */
+// private void recordHistory(WorkflowTask task, String status) {
+// WorkflowHistory history = new WorkflowHistory();
+// history.setInstanceId(task.getInstanceId());
+// history.setNodeId(task.getNodeId());
+// history.setNodeKey(task.getNodeKey());
+// history.setNodeName(task.getNodeName());
+// history.setAssignee(task.getAssignee());
+// history.setAssigneeType(task.getAssigneeType());
+// history.setStatus(status);
+// history.setApproveOpinion(task.getApproveOpinion());
+// workflowHistoryMapper.insert(history);
+// }
+
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public WorkflowInstance startWorkflow(Long memberId, String applyName, String roleType) {
+
+ Long mappingId = academyPermissionMappingMapper.permissionMappingId(memberId, applyName);
+
+ AcademyPermissionMappingDO academyPermissionMappingDO = academyPermissionMappingMapper.selectById(mappingId);
+
+ if (null == mappingId) {
+ throw new HttpException(50005);
+ }
+
+ // 获取该工作流的开始节点
+ WorkflowNode startNode = workflowNodeMapper.selectOne(new QueryWrapper()
+ .lambda()
+ .eq(WorkflowNode::getWorkflowId, mappingId)
+ .eq(WorkflowNode::getVersionCode, academyPermissionMappingDO.getVersionCode())
+ .isNull(WorkflowNode::getPrevNode));
+
+ if (null == startNode) {
+ throw new HttpException(50005);
+ }
+
+ // 某人创建工作流实例 ---> 发起审批
+ WorkflowInstance instance = new WorkflowInstance();
+ instance.setWorkflowId(mappingId);
+ instance.setApplyType(applyName);
+ instance.setApplyId(memberId);
+ instance.setStatus(WorkflowInstanceStatus.DOING); // 运行中
+ instance.setCurrentNode(startNode.getId()); // workNode的id
+ instance.setVersionCode(academyPermissionMappingDO.getVersionCode());
+ workflowInstanceMapper.insert(instance);
+
+ if (startNode == null) {
+ throw new RuntimeException("未找到开始节点");
+ }
+
+ WorkflowTask workflowTask = new WorkflowTask();
+ workflowTask.setInstanceId(instance.getId());
+ workflowTask.setNodeName(TaskType.COMMIT);
+ workflowTask.setAssignee(memberId);
+ workflowTask.setStatus(WorkflowTaskStatus.COMMIT);
+ workflowTask.setCreateDate(LocalDateTime.now());
+ workflowTask.setAssigneeType(roleType);
+ workflowTaskMapper.insert(workflowTask);
+
+ // 创建第一个任务 实例id mappingId 当前节点nodeKey
+ createTasks(instance.getId(), mappingId, startNode.getNodeKey(), academyPermissionMappingDO.getVersionCode());
+ return instance;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public WorkflowInstance rejectWorkflow(Long instanceId, Long memberId, String applyName, String roleType) {
+
+ WorkflowInstance workflowInstance = workflowInstanceMapper.selectById(instanceId);
+
+
+ WorkflowTask workflowTask = new WorkflowTask();
+ workflowTask.setInstanceId(instanceId);
+ workflowTask.setNodeName(TaskType.COMMIT);
+ workflowTask.setAssignee(memberId);
+ workflowTask.setStatus(WorkflowTaskStatus.COMMIT);
+ workflowTask.setCreateDate(LocalDateTime.now());
+ workflowTask.setAssigneeType(roleType);
+ workflowTaskMapper.insert(workflowTask);
+
+ // 创建第一个任务 实例id mappingId 当前节点nodeKey
+ WorkflowNode workflowNode = workflowNodeMapper.selectById(workflowInstance.getCurrentNode());
+ createTasks(instanceId, workflowInstance.getWorkflowId(), workflowNode.getNodeKey(), workflowInstance.getVersionCode());
+ return workflowInstance;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/subsidy/util/ActivityDetectionUtils.java b/src/main/java/com/show/util/ActivityDetectionUtils.java
similarity index 98%
rename from src/main/java/com/subsidy/util/ActivityDetectionUtils.java
rename to src/main/java/com/show/util/ActivityDetectionUtils.java
index 0f09334..077dd30 100644
--- a/src/main/java/com/subsidy/util/ActivityDetectionUtils.java
+++ b/src/main/java/com/show/util/ActivityDetectionUtils.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import com.tencentcloudapi.captcha.v20190722.CaptchaClient;
import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultRequest;
diff --git a/src/main/java/com/subsidy/util/AliyunSmsUtil.java b/src/main/java/com/show/util/AliyunSmsUtil.java
similarity index 97%
rename from src/main/java/com/subsidy/util/AliyunSmsUtil.java
rename to src/main/java/com/show/util/AliyunSmsUtil.java
index 9aa1deb..6711703 100644
--- a/src/main/java/com/subsidy/util/AliyunSmsUtil.java
+++ b/src/main/java/com/show/util/AliyunSmsUtil.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@@ -8,8 +8,8 @@ import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
-import com.subsidy.common.configure.AliyunSmsProperties;
-import com.subsidy.common.exception.HttpException;
+import com.show.common.configure.AliyunSmsProperties;
+import com.show.common.exception.HttpException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
diff --git a/src/main/java/com/subsidy/util/Base64Util.java b/src/main/java/com/show/util/Base64Util.java
similarity index 98%
rename from src/main/java/com/subsidy/util/Base64Util.java
rename to src/main/java/com/show/util/Base64Util.java
index cabdb91..2433a8b 100644
--- a/src/main/java/com/subsidy/util/Base64Util.java
+++ b/src/main/java/com/show/util/Base64Util.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
diff --git a/src/main/java/com/subsidy/util/BaseModel.java b/src/main/java/com/show/util/BaseModel.java
similarity index 96%
rename from src/main/java/com/subsidy/util/BaseModel.java
rename to src/main/java/com/show/util/BaseModel.java
index f53a427..de5f725 100644
--- a/src/main/java/com/subsidy/util/BaseModel.java
+++ b/src/main/java/com/show/util/BaseModel.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
diff --git a/src/main/java/com/subsidy/util/CodeGenerator.java b/src/main/java/com/show/util/CodeGenerator.java
similarity index 99%
rename from src/main/java/com/subsidy/util/CodeGenerator.java
rename to src/main/java/com/show/util/CodeGenerator.java
index 7b488bc..b45d200 100644
--- a/src/main/java/com/subsidy/util/CodeGenerator.java
+++ b/src/main/java/com/show/util/CodeGenerator.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
diff --git a/src/main/java/com/subsidy/util/ConstantUtils.java b/src/main/java/com/show/util/ConstantUtils.java
similarity index 97%
rename from src/main/java/com/subsidy/util/ConstantUtils.java
rename to src/main/java/com/show/util/ConstantUtils.java
index 1d96498..995822a 100644
--- a/src/main/java/com/subsidy/util/ConstantUtils.java
+++ b/src/main/java/com/show/util/ConstantUtils.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
/**
@@ -30,7 +30,7 @@ public class ConstantUtils {
public static final String SUCCESS_UPDATE = "更新成功";
- public static final String FAIL_UPDATE = "更新失败";
+ public static final String SUCCESS_REJECT = "已驳回";
public static final String SET_SUCCESS = "设置成功";
diff --git a/src/main/java/com/subsidy/util/DateFormatUtil.java b/src/main/java/com/show/util/DateFormatUtil.java
similarity index 97%
rename from src/main/java/com/subsidy/util/DateFormatUtil.java
rename to src/main/java/com/show/util/DateFormatUtil.java
index f39120e..6ad2af9 100644
--- a/src/main/java/com/subsidy/util/DateFormatUtil.java
+++ b/src/main/java/com/show/util/DateFormatUtil.java
@@ -1,6 +1,5 @@
-package com.subsidy.util;
+package com.show.util;
-import java.awt.SystemTray;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
@@ -18,7 +17,10 @@ public class DateFormatUtil {
public final static String YEAR = "yyyy";
public final static String FMT_sdf14_L = "yyyy-MM-dd HH:mm:ss";
+ public final static String FMT_sdf14_L24 = "yyyy/MM/dd HH:mm:ss";
+ public final static String FMT_sdf_hms = "HH:mm:ss";
public final static String FMT_sdf_yMd = "yyyy-MM-dd";
+ public final static String FMT_sdf_yyMMdd = "yyyy/MM/dd";
public final static String FMT_sdf_yM = "yyyy-M";
public final static String FMT_sdf_yMM = "yyyy-MM";
public final static String FMT_sdf_Hm = "H:mm";
@@ -117,4 +119,6 @@ public class DateFormatUtil {
}
return System.currentTimeMillis();
}
+
+
}
diff --git a/src/main/java/com/show/util/DateUtil.java b/src/main/java/com/show/util/DateUtil.java
new file mode 100644
index 0000000..7c0ef9b
--- /dev/null
+++ b/src/main/java/com/show/util/DateUtil.java
@@ -0,0 +1,374 @@
+package com.show.util;
+
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class DateUtil {
+
+ public static Long dateDiff(String startDate, String endDate, String format) {
+ // 定义日期格式
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+
+ // 将字符串日期转换为LocalDate对象
+ LocalDate date1 = LocalDate.parse(startDate, formatter);
+ LocalDate date2 = LocalDate.parse(endDate, formatter);
+
+ // 计算日期差
+ return ChronoUnit.DAYS.between(date1, date2);
+ }
+
+ /**
+ * 获取两个日期之间的所有日期(包括开始日期和结束日期)
+ *
+ * @return 日期列表
+ */
+ public static List getDatesBetween(String startDateStr, String endDateStr) {
+
+ List dates = new ArrayList<>();
+ // 定义日期格式
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+
+ // 解析字符串为 LocalDate 对象
+ LocalDate startDate = LocalDate.parse(startDateStr, formatter);
+ LocalDate endDate = LocalDate.parse(endDateStr, formatter);
+
+ // 使用循环遍历日期范围
+ LocalDate currentDate = startDate;
+ while (!currentDate.isAfter(endDate)) {
+ dates.add(currentDate.format(formatter));
+ currentDate = currentDate.plusDays(1); // 增加一天
+ }
+
+ return dates;
+ }
+
+ /**
+ * 获取两个日期之间的所有日期(包括开始日期和结束日期)
+ *
+ * @return 日期列表
+ */
+ public static List getDatesBetweenUtilNow(String startDateStr, String endDateStr) {
+
+ List dates = new ArrayList<>();
+ // 定义日期格式
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+
+ // 解析字符串为 LocalDate 对象
+ LocalDate startDate = LocalDate.parse(startDateStr, formatter);
+ LocalDate endDate = LocalDate.parse(endDateStr, formatter);
+ if (!endDate.isAfter(LocalDate.now())) {
+ // 使用循环遍历日期范围
+ LocalDate currentDate = startDate;
+ while (!currentDate.isAfter(endDate)) {
+ dates.add(currentDate.format(formatter));
+ currentDate = currentDate.plusDays(1); // 增加一天
+ }
+ } else {
+ // 使用循环遍历日期范围
+ LocalDate currentDate = startDate;
+ while (!currentDate.isAfter(LocalDate.now())) {
+ dates.add(currentDate.format(formatter));
+ currentDate = currentDate.plusDays(1); // 增加一天
+ }
+ }
+ return dates;
+ }
+
+ public static String dayOfWeek() {
+ // 获取当前日期
+ LocalDate today = LocalDate.now();
+ // 获取星期几
+ DayOfWeek dayOfWeek = today.getDayOfWeek();
+ // 转换为中文星期几
+ return getChineseDayOfWeek(dayOfWeek);
+ }
+
+ public static String getChineseDayOfWeek(DayOfWeek dayOfWeek) {
+ switch (dayOfWeek) {
+ case MONDAY:
+ return "星期一";
+ case TUESDAY:
+ return "星期二";
+ case WEDNESDAY:
+ return "星期三";
+ case THURSDAY:
+ return "星期四";
+ case FRIDAY:
+ return "星期五";
+ case SATURDAY:
+ return "星期六";
+ case SUNDAY:
+ return "星期天";
+ default:
+ return "未知";
+ }
+ }
+
+ public static Long calculateTimeDifference(String startTimeStr, String endTimeStr) {
+ // 定义时间格式
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DateFormatUtil.FMT_sdf_HHmm);
+
+ // 将字符串解析为 LocalTime 对象
+ LocalTime startTime = LocalTime.parse(startTimeStr, formatter);
+ LocalTime endTime = LocalTime.parse(endTimeStr, formatter);
+
+ // 计算时间差
+ Duration duration = Duration.between(startTime, endTime);
+
+ // 获取时间差的总秒数
+ return Math.abs(duration.getSeconds());
+ }
+
+ /**
+ * 查看某天是否在某个区间内
+ */
+ public static boolean dateBetweenOrNot(Date date, Date startDate, Date endDate) {
+
+ try {
+ // 判断日期是否在范围内
+ return !date.before(startDate) && !date.after(endDate);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+
+ }
+
+ /**
+ * 查看某天是否在某个区间内 是的话true 不是的话 false
+ */
+ public static boolean dateBeforeAfter(String date, String compareDate, String formatter) {
+
+ try {
+ Date parse = DateFormatUtil.parse(date, formatter);
+ Date parse2 = DateFormatUtil.parse(compareDate, formatter);
+ // 判断日期早晚
+ return parse.before(parse2);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ public static String dateToMonth(Integer dayCnt) {
+ // 进行除法运算,并指定保留1位小数,使用四舍五入模式
+ return new BigDecimal(dayCnt).divide(new BigDecimal(30), 1, RoundingMode.HALF_UP).toString();
+ }
+
+ /**
+ * 计算时间差
+ */
+ /**
+ * 计算两个时间字符串相差的小时数,保留一位小数
+ *
+ * @param timeStr1 第一个时间字符串
+ * @param timeStr2 第二个时间字符串
+ * @return 两个时间相差的小时数(绝对值)
+ * @throws ParseException 时间格式解析异常
+ * 取最小值
+ */
+ public static String calculateHourDifference(String timeStr1, String timeStr2, String cumulativeTime) {
+ try {
+ SimpleDateFormat sdf = new SimpleDateFormat(DateFormatUtil.FMT_sdf14_L24);
+ Date date1 = sdf.parse(timeStr1);
+ Date date2 = sdf.parse(timeStr2);
+
+ // 计算毫秒差的绝对值
+ long diffInMillies = Math.abs(date2.getTime() - date1.getTime());
+
+ // 转换为小时(1小时 = 3600000毫秒)
+ double diffInHours = diffInMillies / 3600000.0;
+
+ // 使用DecimalFormat保留一位小数
+ DecimalFormat df = new DecimalFormat("#.0");
+ df.setRoundingMode(RoundingMode.HALF_UP); // 四舍五入
+
+ double num1 = Double.parseDouble(df.format(diffInHours));
+ // 将字符串转换为double
+ double num2 = Double.parseDouble(cumulativeTime);
+
+ // 取最小值
+ double minValue = Math.min(num1, num2);
+
+ // 结果可以保持为数值类型,也可以转回字符串
+ return String.valueOf(minValue);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static String currentTime() {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+ // 获取当前时间并格式化为字符串
+ return sdf.format(new Date());
+ }
+
+ /**
+ * 时间烦我内 日期的时分秒在某个区间
+ *
+ * @param targetTimeStr
+ * @param startTimeStr
+ * @param endTimeStr
+ * @return
+ */
+ public static Boolean betweenDateHour(String targetTimeStr, String startTimeStr, String endTimeStr) {
+
+ // 定义时间格式器
+ DateTimeFormatter fullFormatter = DateTimeFormatter.ofPattern(DateFormatUtil.FMT_sdf14_L24);
+ DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
+
+ // 解析目标时间为LocalDateTime
+ LocalDateTime targetDateTime = LocalDateTime.parse(targetTimeStr, fullFormatter);
+ // 提取时间部分
+ LocalTime targetTime = targetDateTime.toLocalTime();
+
+ // 解析时间范围
+ LocalTime startTime = LocalTime.parse(startTimeStr, timeFormatter);
+ LocalTime endTime = LocalTime.parse(endTimeStr, timeFormatter);
+
+ // 判断是否在范围内(包含边界)
+ return !targetTime.isBefore(startTime) && !targetTime.isAfter(endTime);
+ }
+
+ /**
+ * 时间烦我内 日期的时分秒在某个区间
+ *
+ * @param targetTimeStr
+ * @param startTimeStr
+ * @param endTimeStr
+ * @return
+ */
+ public static Boolean betweenDate(String targetTimeStr, String startTimeStr, String endTimeStr) {
+ // 定义日期时间格式器
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+
+ // 解析时间字符串为LocalDateTime对象
+ LocalDateTime targetTime = LocalDateTime.parse(targetTimeStr, dateTimeFormatter);
+
+ // 解析开始日期和结束日期为LocalDate对象
+ LocalDate startDate = LocalDate.parse(startTimeStr, dateFormatter);
+ LocalDate endDate = LocalDate.parse(endTimeStr, dateFormatter);
+
+ // 将开始日期转换为当天的起始时间(00:00:00)
+ LocalDateTime startDateTime = startDate.atStartOfDay();
+ // 将结束日期转换为第二天的起始时间(00:00:00),这样包含整个结束日
+ LocalDateTime endDateTime = endDate.plusDays(1).atStartOfDay();
+
+ // 判断目标时间是否在范围内
+ return targetTime.isAfter(startDateTime) && targetTime.isBefore(endDateTime);
+
+ }
+
+ public static String localToString(LocalDateTime localDateTime){
+ return localDateTime.toString().replace("T"," ");
+ }
+
+ // 定义日期格式
+ private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+
+ /**
+ * 计算两个日期之间的工作日天数(排除周六和周日)
+ * @param startDateStr 开始日期字符串,格式为"yyyy/MM/dd"
+ * @param endDateStr 结束日期字符串,格式为"yyyy/MM/dd"
+ * @return 工作日天数
+ */
+ public static Integer calculateWorkdays(String startDateStr, String endDateStr) {
+ // 解析日期字符串为LocalDate对象
+ LocalDate startDate = LocalDate.parse(startDateStr, formatter);
+ LocalDate endDate = LocalDate.parse(endDateStr, formatter);
+
+ // 确保开始日期不晚于结束日期
+ if (startDate.isAfter(endDate)) {
+ LocalDate temp = startDate;
+ startDate = endDate;
+ endDate = temp;
+ }
+
+ long totalDays = ChronoUnit.DAYS.between(startDate, endDate) + 1; // 包含起止日期
+ int weekends = 0;
+
+ // 遍历每一天,统计周末天数
+ LocalDate currentDate = startDate;
+ while (!currentDate.isAfter(endDate)) {
+ int dayOfWeek = currentDate.getDayOfWeek().getValue();
+ // 6是周六,7是周日
+ if (dayOfWeek == 6 || dayOfWeek == 7) {
+ weekends++;
+ }
+ currentDate = currentDate.plusDays(1);
+ }
+
+ // 工作日 = 总天数 - 周末天数
+ return Integer.valueOf((int) totalDays) - weekends;
+ }
+
+ /**
+ * 计算指定年份对应的学年开始时间和结束时间,返回格式化字符串数组
+ * 学年定义为: 当年9月1日 00:00:00 至 次年8月31日 23:59:59
+ *
+ * @param year 学年的年份,例如2025表示2025学年
+ * @return 返回一个包含两个字符串的数组,第一个是开始时间,第二个是结束时间
+ * 格式为: yyyy/MM/dd HH:mm:ss
+ */
+ public static String[] getSchoolYearTimeAsString(int year,int diff) {
+ // 定义日期时间格式化器
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
+
+ // 学年开始时间:当年9月1日 00:00:00
+ LocalDateTime startTime = LocalDateTime.of(year, 9, 1, 0, 0, 0);
+
+ // 学年结束时间:次年8月31日 23:59:59
+ LocalDateTime endTime = LocalDateTime.of(year + diff, 8, 31, 23, 59, 59);
+
+ // 格式化并返回字符串数组
+ return new String[]{
+ startTime.format(formatter),
+ endTime.format(formatter)
+ };
+ }
+
+ /**
+ * 检查两个时间字符串的间隔是否超过300秒
+ * @param time1 第一个时间字符串
+ * @return 如果间隔超过300秒返回true,否则返回false
+ * @throws ParseException 时间格式解析错误
+ */
+ public static boolean isOver300Seconds(String time1) throws ParseException {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+
+ // 解析时间字符串为Date对象
+ Date date1 = sdf.parse(time1);
+
+ // 计算两个时间的毫秒差
+ long timeDiffMs = Math.abs(date1.getTime() - new Date().getTime());
+
+ // 转换为秒并判断是否超过300秒
+ long timeDiffSeconds = timeDiffMs / 1000;
+ return timeDiffSeconds >= 300;
+ }
+
+ public static Integer currentYear(){
+ return Year.now().getValue();
+ }
+
+ public static void main(String[] args) {
+ // 示例:计算2025学年的时间范围
+ int year = 2025;
+ String[] schoolYearTimes = getSchoolYearTimeAsString(year,2);
+
+ System.out.println(year + "学年开始时间: " + schoolYearTimes[0]);
+ System.out.println(year + "学年结束时间: " + schoolYearTimes[1]);
+ }
+}
diff --git a/src/main/java/com/subsidy/util/DudaoConstant.java b/src/main/java/com/show/util/DudaoConstant.java
similarity index 97%
rename from src/main/java/com/subsidy/util/DudaoConstant.java
rename to src/main/java/com/show/util/DudaoConstant.java
index 22b77e2..be1760c 100644
--- a/src/main/java/com/subsidy/util/DudaoConstant.java
+++ b/src/main/java/com/show/util/DudaoConstant.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
public class DudaoConstant {
diff --git a/src/main/java/com/subsidy/util/EhCacheUtil.java b/src/main/java/com/show/util/EhCacheUtil.java
similarity index 97%
rename from src/main/java/com/subsidy/util/EhCacheUtil.java
rename to src/main/java/com/show/util/EhCacheUtil.java
index 45dba17..1a286b6 100644
--- a/src/main/java/com/subsidy/util/EhCacheUtil.java
+++ b/src/main/java/com/show/util/EhCacheUtil.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
diff --git a/src/main/java/com/subsidy/util/EncryptString.java b/src/main/java/com/show/util/EncryptString.java
similarity index 96%
rename from src/main/java/com/subsidy/util/EncryptString.java
rename to src/main/java/com/show/util/EncryptString.java
index 79ca6ff..2575e6a 100644
--- a/src/main/java/com/subsidy/util/EncryptString.java
+++ b/src/main/java/com/show/util/EncryptString.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import lombok.extern.slf4j.Slf4j;
import org.bouncycastle.crypto.digests.SM3Digest;
diff --git a/src/main/java/com/subsidy/util/EncryptUtil.java b/src/main/java/com/show/util/EncryptUtil.java
similarity index 100%
rename from src/main/java/com/subsidy/util/EncryptUtil.java
rename to src/main/java/com/show/util/EncryptUtil.java
diff --git a/src/main/java/com/subsidy/util/ExcelFormatUtils.java b/src/main/java/com/show/util/ExcelFormatUtils.java
similarity index 94%
rename from src/main/java/com/subsidy/util/ExcelFormatUtils.java
rename to src/main/java/com/show/util/ExcelFormatUtils.java
index c0330e2..cff75af 100644
--- a/src/main/java/com/subsidy/util/ExcelFormatUtils.java
+++ b/src/main/java/com/show/util/ExcelFormatUtils.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import java.util.Arrays;
import java.util.List;
diff --git a/src/main/java/com/subsidy/util/HttpUtil.java b/src/main/java/com/show/util/HttpUtil.java
similarity index 97%
rename from src/main/java/com/subsidy/util/HttpUtil.java
rename to src/main/java/com/show/util/HttpUtil.java
index 64125fd..1fc22b3 100644
--- a/src/main/java/com/subsidy/util/HttpUtil.java
+++ b/src/main/java/com/show/util/HttpUtil.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import org.apache.http.Header;
diff --git a/src/main/java/com/subsidy/util/IpAddressUtil.java b/src/main/java/com/show/util/IpAddressUtil.java
similarity index 98%
rename from src/main/java/com/subsidy/util/IpAddressUtil.java
rename to src/main/java/com/show/util/IpAddressUtil.java
index b81d8b2..9ab7f8b 100644
--- a/src/main/java/com/subsidy/util/IpAddressUtil.java
+++ b/src/main/java/com/show/util/IpAddressUtil.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
diff --git a/src/main/java/com/subsidy/util/JwtUtil.java b/src/main/java/com/show/util/JwtUtil.java
similarity index 98%
rename from src/main/java/com/subsidy/util/JwtUtil.java
rename to src/main/java/com/show/util/JwtUtil.java
index 972185b..6a56f3f 100644
--- a/src/main/java/com/subsidy/util/JwtUtil.java
+++ b/src/main/java/com/show/util/JwtUtil.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
diff --git a/src/main/java/com/subsidy/util/Localstorage.java b/src/main/java/com/show/util/Localstorage.java
similarity index 89%
rename from src/main/java/com/subsidy/util/Localstorage.java
rename to src/main/java/com/show/util/Localstorage.java
index 44beba2..d0ae675 100644
--- a/src/main/java/com/subsidy/util/Localstorage.java
+++ b/src/main/java/com/show/util/Localstorage.java
@@ -1,4 +1,4 @@
-package com.subsidy.util;
+package com.show.util;
import org.springframework.web.bind.annotation.RestController;
@@ -9,10 +9,10 @@ import java.util.concurrent.ConcurrentHashMap;
public class Localstorage {
private static final ThreadLocal