heweichun 17 часов назад
Родитель
Сommit
8dc698d885
36 измененных файлов с 11062 добавлено и 132 удалено
  1. 8442 0
      logs/sys-console.log
  2. 502 5
      logs/sys-error.log
  3. 299 100
      logs/sys-info.log
  4. 68 0
      src/main/java/com/zhongzheng/bo/ImportCompanyBo.java
  5. 60 0
      src/main/java/com/zhongzheng/bo/ImportCompanyCertBo.java
  6. 72 0
      src/main/java/com/zhongzheng/bo/ImportPersonBo.java
  7. 73 0
      src/main/java/com/zhongzheng/bo/ImportPersonCertBo.java
  8. 36 0
      src/main/java/com/zhongzheng/bo/MemoCertRequest.java
  9. 1 0
      src/main/java/com/zhongzheng/common/croe/CustomTenantLineHandler.java
  10. 1 1
      src/main/java/com/zhongzheng/common/util/EasyPoiUtil.java
  11. 101 6
      src/main/java/com/zhongzheng/controller/SysCompanyController.java
  12. 127 0
      src/main/java/com/zhongzheng/domian/Memo.java
  13. 78 0
      src/main/java/com/zhongzheng/domian/MemoCertificate.java
  14. 15 0
      src/main/java/com/zhongzheng/domian/SysCertificate.java
  15. 9 0
      src/main/java/com/zhongzheng/domian/SysPerson.java
  16. 19 0
      src/main/java/com/zhongzheng/mapper/MemoCertificateMapper.java
  17. 19 0
      src/main/java/com/zhongzheng/mapper/MemoMapper.java
  18. 4 0
      src/main/java/com/zhongzheng/mapper/SysCertificateAdditionMapper.java
  19. 17 0
      src/main/java/com/zhongzheng/mapper/SysCertificateMapper.java
  20. 1 0
      src/main/java/com/zhongzheng/service/ICertificateMajorService.java
  21. 18 0
      src/main/java/com/zhongzheng/service/IMemoCertificateService.java
  22. 24 0
      src/main/java/com/zhongzheng/service/IMemoService.java
  23. 5 3
      src/main/java/com/zhongzheng/service/ISysCertificateAdditionService.java
  24. 16 0
      src/main/java/com/zhongzheng/service/ISysCertificateService.java
  25. 2 0
      src/main/java/com/zhongzheng/service/ISysCertificateTypeService.java
  26. 4 1
      src/main/java/com/zhongzheng/service/ISysCompanyService.java
  27. 7 0
      src/main/java/com/zhongzheng/service/ISysPersonService.java
  28. 8 0
      src/main/java/com/zhongzheng/service/impl/CertificateMajorServiceImpl.java
  29. 30 0
      src/main/java/com/zhongzheng/service/impl/MemoCertificateServiceImpl.java
  30. 75 0
      src/main/java/com/zhongzheng/service/impl/MemoServiceImpl.java
  31. 121 7
      src/main/java/com/zhongzheng/service/impl/SysCertificateAdditionServiceImpl.java
  32. 443 3
      src/main/java/com/zhongzheng/service/impl/SysCertificateServiceImpl.java
  33. 7 0
      src/main/java/com/zhongzheng/service/impl/SysCertificateTypeServiceImpl.java
  34. 71 1
      src/main/java/com/zhongzheng/service/impl/SysCompanyServiceImpl.java
  35. 119 3
      src/main/java/com/zhongzheng/service/impl/SysPersonServiceImpl.java
  36. 168 2
      src/main/resources/mapper/SysCertificateMapper.xml

Разница между файлами не показана из-за своего большого размера
+ 8442 - 0
logs/sys-console.log


+ 502 - 5
logs/sys-error.log

@@ -1,7 +1,11 @@
-2026-03-31 17:20:53 [http-nio-6088-exec-5] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.zhongzheng.common.filter.UserPasswordNotMatchException: 用户不存在/密码错误] with root cause
-com.zhongzheng.common.filter.UserPasswordNotMatchException: 用户不存在/密码错误
-	at com.zhongzheng.common.model.SysLoginService.login(SysLoginService.java:94)
-	at com.zhongzheng.controller.SysLoginController.login(SysLoginController.java:65)
+2026-06-06 22:23:03 [http-nio-6088-exec-4] ERROR c.z.c.filter.GlobalExceptionHandler - null
+java.lang.NullPointerException: null
+	at com.zhongzheng.service.impl.SysCertificateServiceImpl.importCompanyCert(SysCertificateServiceImpl.java:838)
+	at com.zhongzheng.service.impl.SysCertificateServiceImpl$$FastClassBySpringCGLIB$$68250681.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)
+	at com.zhongzheng.service.impl.SysCertificateServiceImpl$$EnhancerBySpringCGLIB$$cde03b71.importCompanyCert(<generated>)
+	at com.zhongzheng.controller.SysCompanyController.ImportEnterpriseCert(SysCompanyController.java:349)
 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
@@ -36,7 +40,7 @@ com.zhongzheng.common.filter.UserPasswordNotMatchException: 用户不存在/密
 	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
-	at com.zhongzheng.common.filter.RepeatableFilter.doFilter(RepeatableFilter.java:39)
+	at com.zhongzheng.common.filter.RepeatableFilter.doFilter(RepeatableFilter.java:35)
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
@@ -94,6 +98,499 @@ com.zhongzheng.common.filter.UserPasswordNotMatchException: 用户不存在/密
 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.zhongzheng.common.filter.XssFilter.doFilter(XssFilter.java:62)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
+	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
+	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
+	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
+	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
+	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
+	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
+	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
+	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
+	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
+	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
+	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
+	at java.lang.Thread.run(Thread.java:750)
+2026-06-06 22:24:51 [http-nio-6088-exec-5] ERROR c.z.c.filter.GlobalExceptionHandler - null
+java.lang.NullPointerException: null
+	at com.zhongzheng.service.impl.SysCertificateServiceImpl.importCompanyCert(SysCertificateServiceImpl.java:838)
+	at com.zhongzheng.service.impl.SysCertificateServiceImpl$$FastClassBySpringCGLIB$$68250681.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)
+	at com.zhongzheng.service.impl.SysCertificateServiceImpl$$EnhancerBySpringCGLIB$$cde03b71.importCompanyCert(<generated>)
+	at com.zhongzheng.controller.SysCompanyController.ImportEnterpriseCert(SysCompanyController.java:349)
+	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.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
+	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
+	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
+	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
+	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
+	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
+	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
+	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
+	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
+	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
+	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
+	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
+	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:73)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.zhongzheng.common.filter.RepeatableFilter.doFilter(RepeatableFilter.java:35)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
+	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
+	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at com.zhongzheng.common.filter.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:48)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
+	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
+	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
+	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
+	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:109)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.zhongzheng.common.filter.XssFilter.doFilter(XssFilter.java:62)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
+	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
+	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
+	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
+	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
+	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
+	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
+	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
+	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
+	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
+	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
+	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
+	at java.lang.Thread.run(Thread.java:750)
+2026-06-06 22:44:10 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - 
+
+***************************
+APPLICATION FAILED TO START
+***************************
+
+Description:
+
+Web server failed to start. Port 6088 was already in use.
+
+Action:
+
+Identify and stop the process that's listening on port 6088 or configure this application to listen on another port.
+
+2026-06-06 22:47:11 [http-nio-6088-exec-3] ERROR c.z.c.filter.GlobalExceptionHandler - null
+java.lang.NullPointerException: null
+	at com.zhongzheng.service.impl.SysCompanyServiceImpl.importCompany(SysCompanyServiceImpl.java:151)
+	at com.zhongzheng.service.impl.SysCompanyServiceImpl$$FastClassBySpringCGLIB$$a0d7e95b.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)
+	at com.zhongzheng.service.impl.SysCompanyServiceImpl$$EnhancerBySpringCGLIB$$5f984a0c.importCompany(<generated>)
+	at com.zhongzheng.controller.SysCompanyController.ImportCompany(SysCompanyController.java:322)
+	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.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
+	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
+	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
+	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
+	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
+	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
+	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
+	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
+	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
+	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
+	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
+	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
+	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:73)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.zhongzheng.common.filter.RepeatableFilter.doFilter(RepeatableFilter.java:35)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
+	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
+	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at com.zhongzheng.common.filter.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:48)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
+	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
+	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
+	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
+	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:109)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.zhongzheng.common.filter.XssFilter.doFilter(XssFilter.java:62)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
+	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
+	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
+	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
+	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
+	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
+	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
+	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
+	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
+	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
+	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
+	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
+	at java.lang.Thread.run(Thread.java:750)
+2026-06-06 22:50:22 [http-nio-6088-exec-2] ERROR c.z.c.filter.GlobalExceptionHandler - null
+java.lang.NullPointerException: null
+	at com.zhongzheng.service.impl.SysCompanyServiceImpl.importCompany(SysCompanyServiceImpl.java:151)
+	at com.zhongzheng.service.impl.SysCompanyServiceImpl$$FastClassBySpringCGLIB$$a0d7e95b.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)
+	at com.zhongzheng.service.impl.SysCompanyServiceImpl$$EnhancerBySpringCGLIB$$5f984a0c.importCompany(<generated>)
+	at com.zhongzheng.controller.SysCompanyController.ImportCompany(SysCompanyController.java:322)
+	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.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
+	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
+	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
+	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
+	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
+	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
+	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
+	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
+	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
+	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
+	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
+	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
+	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:73)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.zhongzheng.common.filter.RepeatableFilter.doFilter(RepeatableFilter.java:35)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
+	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
+	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at com.zhongzheng.common.filter.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:48)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
+	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
+	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
+	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
+	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:109)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.zhongzheng.common.filter.XssFilter.doFilter(XssFilter.java:62)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
+	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
+	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
+	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
+	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
+	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
+	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
+	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
+	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
+	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
+	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
+	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
+	at java.lang.Thread.run(Thread.java:750)
+2026-06-06 22:51:00 [http-nio-6088-exec-8] ERROR c.z.c.filter.GlobalExceptionHandler - null
+java.lang.NullPointerException: null
+	at com.zhongzheng.service.impl.SysCompanyServiceImpl.importCompany(SysCompanyServiceImpl.java:151)
+	at com.zhongzheng.service.impl.SysCompanyServiceImpl$$FastClassBySpringCGLIB$$a0d7e95b.invoke(<generated>)
+	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
+	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)
+	at com.zhongzheng.service.impl.SysCompanyServiceImpl$$EnhancerBySpringCGLIB$$5f984a0c.importCompany(<generated>)
+	at com.zhongzheng.controller.SysCompanyController.ImportCompany(SysCompanyController.java:322)
+	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.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
+	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
+	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
+	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
+	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
+	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
+	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
+	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
+	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
+	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
+	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
+	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
+	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:73)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.zhongzheng.common.filter.RepeatableFilter.doFilter(RepeatableFilter.java:35)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
+	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
+	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at com.zhongzheng.common.filter.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:48)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
+	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
+	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
+	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
+	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
+	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:109)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+	at com.zhongzheng.common.filter.XssFilter.doFilter(XssFilter.java:62)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)

+ 299 - 100
logs/sys-info.log

@@ -1,100 +1,299 @@
-2026-04-02 10:02:47 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
-2026-04-02 10:02:47 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
-2026-04-02 10:04:55 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.22.Final
-2026-04-02 10:04:56 [main] INFO  c.z.SaaaMarketingApplication - The following profiles are active: dev
-2026-04-02 10:04:58 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-6088"]
-2026-04-02 10:04:58 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
-2026-04-02 10:04:58 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.41]
-2026-04-02 10:04:58 [main] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
-2026-04-02 10:04:58 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
-2026-04-02 10:04:59 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
-2026-04-02 10:05:02 [main] INFO  s.d.s.w.WebMvcPropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2ControllerWebMvc#getDocumentation(String, HttpServletRequest)]
-2026-04-02 10:05:02 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
-2026-04-02 10:05:02 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
-2026-04-02 10:05:04 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Documentation plugins bootstrapped
-2026-04-02 10:05:04 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
-2026-04-02 10:05:04 [main] INFO  s.d.s.w.s.ApiListingReferenceScanner - Scanning for api listing references
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: contact_listUsingGET_1
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_1
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: delUsingPOST_1
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_1
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_1
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_2
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_2
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_2
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_3
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_3
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_1
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_1
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_3
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_2
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_4
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_4
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_3
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_4
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_2
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_5
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_5
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_4
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_3
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_5
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_6
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_6
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_5
-2026-04-02 10:05:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_6
-2026-04-02 10:05:05 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-6088"]
-2026-04-02 10:05:06 [main] INFO  c.z.SaaaMarketingApplication - Started SaaaMarketingApplication in 11.703 seconds (JVM running for 12.082)
-2026-04-02 10:05:06 [http-nio-6088-exec-1] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
-2026-04-02 10:05:07 [registrationTask1] INFO  d.c.b.a.c.r.ApplicationRegistrator - Application registered itself as 1a80c6d0798b
-2026-04-02 10:05:07 [boundedElastic-7] INFO  io.lettuce.core.EpollProvider - Starting without optional epoll library
-2026-04-02 10:05:07 [boundedElastic-7] INFO  io.lettuce.core.KqueueProvider - Starting without optional kqueue library
-2026-04-02 14:55:27 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
-2026-04-02 14:55:27 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
-2026-04-02 14:55:32 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.22.Final
-2026-04-02 14:55:33 [main] INFO  c.z.SaaaMarketingApplication - The following profiles are active: dev
-2026-04-02 14:55:35 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-6088"]
-2026-04-02 14:55:35 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
-2026-04-02 14:55:35 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.41]
-2026-04-02 14:55:35 [main] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
-2026-04-02 14:55:35 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
-2026-04-02 14:55:36 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
-2026-04-02 14:55:38 [main] INFO  s.d.s.w.WebMvcPropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2ControllerWebMvc#getDocumentation(String, HttpServletRequest)]
-2026-04-02 14:55:38 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
-2026-04-02 14:55:38 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Documentation plugins bootstrapped
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.s.ApiListingReferenceScanner - Scanning for api listing references
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: contact_listUsingGET_1
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_1
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: delUsingPOST_1
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_1
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_1
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_2
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_2
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_2
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_3
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_3
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_1
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_1
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_3
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_2
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_4
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_4
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_3
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_4
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_2
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_5
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_5
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_4
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_3
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_5
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_6
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_6
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_5
-2026-04-02 14:55:40 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_6
-2026-04-02 14:55:40 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-6088"]
-2026-04-02 14:55:41 [main] INFO  c.z.SaaaMarketingApplication - Started SaaaMarketingApplication in 9.661 seconds (JVM running for 10.053)
-2026-04-02 14:55:41 [http-nio-6088-exec-1] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
-2026-04-02 14:55:42 [registrationTask1] INFO  d.c.b.a.c.r.ApplicationRegistrator - Application registered itself as 1a80c6d0798b
-2026-04-02 14:55:42 [boundedElastic-7] INFO  io.lettuce.core.EpollProvider - Starting without optional epoll library
-2026-04-02 14:55:42 [boundedElastic-7] INFO  io.lettuce.core.KqueueProvider - Starting without optional kqueue library
+2026-06-06 22:20:53 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
+2026-06-06 22:20:53 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
+2026-06-06 22:20:58 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.22.Final
+2026-06-06 22:20:59 [main] INFO  c.z.SaaaMarketingApplication - The following profiles are active: dev
+2026-06-06 22:21:01 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:21:01 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
+2026-06-06 22:21:01 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.41]
+2026-06-06 22:21:01 [main] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2026-06-06 22:21:01 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
+2026-06-06 22:21:02 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
+2026-06-06 22:21:04 [main] INFO  s.d.s.w.WebMvcPropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2ControllerWebMvc#getDocumentation(String, HttpServletRequest)]
+2026-06-06 22:21:04 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:21:04 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:21:07 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Documentation plugins bootstrapped
+2026-06-06 22:21:07 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
+2026-06-06 22:21:07 [main] INFO  s.d.s.w.s.ApiListingReferenceScanner - Scanning for api listing references
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: contact_listUsingGET_1
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_1
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: delUsingPOST_1
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_1
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_1
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_2
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_2
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_2
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_3
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_3
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_1
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_1
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_3
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_2
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_4
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_4
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_3
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_4
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_2
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_5
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_5
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_4
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_3
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_5
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_6
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_6
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_5
+2026-06-06 22:21:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_6
+2026-06-06 22:21:08 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:21:11 [main] INFO  c.z.SaaaMarketingApplication - Started SaaaMarketingApplication in 13.285 seconds (JVM running for 13.732)
+2026-06-06 22:21:11 [http-nio-6088-exec-1] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2026-06-06 22:21:12 [registrationTask1] INFO  d.c.b.a.c.r.ApplicationRegistrator - Application registered itself as 1a80c6d0798b
+2026-06-06 22:21:12 [boundedElastic-7] INFO  io.lettuce.core.EpollProvider - Starting without optional epoll library
+2026-06-06 22:21:12 [boundedElastic-7] INFO  io.lettuce.core.KqueueProvider - Starting without optional kqueue library
+2026-06-06 22:24:53 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
+2026-06-06 22:24:53 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
+2026-06-06 22:24:57 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.22.Final
+2026-06-06 22:24:58 [main] INFO  c.z.SaaaMarketingApplication - The following profiles are active: dev
+2026-06-06 22:25:00 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:25:00 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
+2026-06-06 22:25:00 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.41]
+2026-06-06 22:25:00 [main] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2026-06-06 22:25:00 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
+2026-06-06 22:25:01 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
+2026-06-06 22:25:03 [main] INFO  s.d.s.w.WebMvcPropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2ControllerWebMvc#getDocumentation(String, HttpServletRequest)]
+2026-06-06 22:25:03 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:25:03 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Documentation plugins bootstrapped
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.s.ApiListingReferenceScanner - Scanning for api listing references
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: contact_listUsingGET_1
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_1
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: delUsingPOST_1
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_1
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_1
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_2
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_2
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_2
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_3
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_3
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_1
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_1
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_3
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_2
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_4
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_4
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_3
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_4
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_2
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_5
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_5
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_4
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_3
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_5
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_6
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_6
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_5
+2026-06-06 22:25:05 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_6
+2026-06-06 22:25:05 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:25:06 [main] INFO  c.z.SaaaMarketingApplication - Started SaaaMarketingApplication in 9.911 seconds (JVM running for 10.306)
+2026-06-06 22:25:06 [http-nio-6088-exec-1] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2026-06-06 22:25:07 [registrationTask1] INFO  d.c.b.a.c.r.ApplicationRegistrator - Application registered itself as 1a80c6d0798b
+2026-06-06 22:25:07 [boundedElastic-7] INFO  io.lettuce.core.EpollProvider - Starting without optional epoll library
+2026-06-06 22:25:07 [boundedElastic-7] INFO  io.lettuce.core.KqueueProvider - Starting without optional kqueue library
+2026-06-06 22:43:54 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
+2026-06-06 22:43:54 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
+2026-06-06 22:43:58 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.22.Final
+2026-06-06 22:43:59 [main] INFO  c.z.SaaaMarketingApplication - The following profiles are active: dev
+2026-06-06 22:43:59 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.22.Final
+2026-06-06 22:44:01 [main] INFO  c.z.SaaaMarketingApplication - The following profiles are active: dev
+2026-06-06 22:44:02 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:44:02 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
+2026-06-06 22:44:02 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.41]
+2026-06-06 22:44:02 [main] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2026-06-06 22:44:02 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
+2026-06-06 22:44:03 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:44:03 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
+2026-06-06 22:44:03 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.41]
+2026-06-06 22:44:03 [main] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2026-06-06 22:44:03 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
+2026-06-06 22:44:03 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
+2026-06-06 22:44:04 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
+2026-06-06 22:44:06 [main] INFO  s.d.s.w.WebMvcPropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2ControllerWebMvc#getDocumentation(String, HttpServletRequest)]
+2026-06-06 22:44:06 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:44:06 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:44:07 [main] INFO  s.d.s.w.WebMvcPropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2ControllerWebMvc#getDocumentation(String, HttpServletRequest)]
+2026-06-06 22:44:07 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:44:07 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Documentation plugins bootstrapped
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.s.ApiListingReferenceScanner - Scanning for api listing references
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: contact_listUsingGET_1
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_1
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: delUsingPOST_1
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_1
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_1
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_2
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_2
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_2
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_3
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_3
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_1
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_1
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_3
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_2
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_4
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_4
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_3
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_4
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_2
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_5
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_5
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_4
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_3
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_5
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_6
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_6
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_5
+2026-06-06 22:44:08 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_6
+2026-06-06 22:44:08 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:44:09 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Documentation plugins bootstrapped
+2026-06-06 22:44:09 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
+2026-06-06 22:44:09 [main] INFO  s.d.s.w.s.ApiListingReferenceScanner - Scanning for api listing references
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: contact_listUsingGET_1
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_1
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: delUsingPOST_1
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_1
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_1
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_2
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_2
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_2
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_3
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_3
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_1
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_1
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_3
+2026-06-06 22:44:10 [main] INFO  c.z.SaaaMarketingApplication - Started SaaaMarketingApplication in 11.83 seconds (JVM running for 12.263)
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_2
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_4
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_4
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_3
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_4
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_2
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_5
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_5
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_4
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_3
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_5
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_6
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_6
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_5
+2026-06-06 22:44:10 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_6
+2026-06-06 22:44:10 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:44:10 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:44:10 [main] INFO  o.a.catalina.core.StandardService - Stopping service [Tomcat]
+2026-06-06 22:44:10 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:44:10 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:44:10 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
+2026-06-06 22:44:10 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
+2026-06-06 22:44:10 [http-nio-6088-exec-1] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2026-06-06 22:44:10 [registrationTask1] INFO  d.c.b.a.c.r.ApplicationRegistrator - Application registered itself as 1a80c6d0798b
+2026-06-06 22:44:10 [boundedElastic-7] INFO  io.lettuce.core.EpollProvider - Starting without optional epoll library
+2026-06-06 22:44:10 [boundedElastic-7] INFO  io.lettuce.core.KqueueProvider - Starting without optional kqueue library
+2026-06-06 22:44:58 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
+2026-06-06 22:44:58 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
+2026-06-06 22:45:02 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.22.Final
+2026-06-06 22:45:03 [main] INFO  c.z.SaaaMarketingApplication - The following profiles are active: dev
+2026-06-06 22:45:05 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:45:05 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
+2026-06-06 22:45:05 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.41]
+2026-06-06 22:45:05 [main] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2026-06-06 22:45:05 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
+2026-06-06 22:45:07 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
+2026-06-06 22:45:09 [main] INFO  s.d.s.w.WebMvcPropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2ControllerWebMvc#getDocumentation(String, HttpServletRequest)]
+2026-06-06 22:45:09 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:45:09 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:45:12 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Documentation plugins bootstrapped
+2026-06-06 22:45:12 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.s.ApiListingReferenceScanner - Scanning for api listing references
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: contact_listUsingGET_1
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_1
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: delUsingPOST_1
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_1
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_1
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_2
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_2
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_2
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_3
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_3
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_1
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_1
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_3
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_2
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_4
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_4
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_3
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_4
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_2
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_5
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_5
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_4
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_3
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_5
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_6
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_6
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_5
+2026-06-06 22:45:13 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_6
+2026-06-06 22:45:13 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:45:15 [main] INFO  c.z.SaaaMarketingApplication - Started SaaaMarketingApplication in 13.829 seconds (JVM running for 14.215)
+2026-06-06 22:45:15 [http-nio-6088-exec-1] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2026-06-06 22:45:16 [registrationTask1] INFO  d.c.b.a.c.r.ApplicationRegistrator - Application registered itself as 1a80c6d0798b
+2026-06-06 22:45:17 [boundedElastic-7] INFO  io.lettuce.core.EpollProvider - Starting without optional epoll library
+2026-06-06 22:45:17 [boundedElastic-7] INFO  io.lettuce.core.KqueueProvider - Starting without optional kqueue library
+2026-06-06 22:52:53 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
+2026-06-06 22:52:53 [SpringContextShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
+2026-06-06 22:52:57 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.22.Final
+2026-06-06 22:52:58 [main] INFO  c.z.SaaaMarketingApplication - The following profiles are active: dev
+2026-06-06 22:53:00 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:53:00 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
+2026-06-06 22:53:00 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.41]
+2026-06-06 22:53:00 [main] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2026-06-06 22:53:00 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
+2026-06-06 22:53:01 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
+2026-06-06 22:53:04 [main] INFO  s.d.s.w.WebMvcPropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2ControllerWebMvc#getDocumentation(String, HttpServletRequest)]
+2026-06-06 22:53:04 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:53:04 [main] INFO  c.n.c.sources.URLConfigurationSource - To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
+2026-06-06 22:53:05 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Documentation plugins bootstrapped
+2026-06-06 22:53:05 [main] INFO  s.d.s.w.p.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
+2026-06-06 22:53:05 [main] INFO  s.d.s.w.s.ApiListingReferenceScanner - Scanning for api listing references
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: contact_listUsingGET_1
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_1
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: delUsingPOST_1
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_1
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_1
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_2
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_2
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_2
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_3
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_3
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_1
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_1
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_3
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_2
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_4
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_4
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_3
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_4
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_2
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_5
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_5
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_4
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: removeUsingPOST_3
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_5
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: addUsingPOST_6
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: editUsingPOST_6
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: getInfoUsingGET_5
+2026-06-06 22:53:06 [main] INFO  s.d.s.w.r.o.CachingOperationNameGenerator - Generating unique operation named: listUsingGET_6
+2026-06-06 22:53:06 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-6088"]
+2026-06-06 22:53:07 [main] INFO  c.z.SaaaMarketingApplication - Started SaaaMarketingApplication in 9.925 seconds (JVM running for 10.316)
+2026-06-06 22:53:07 [http-nio-6088-exec-1] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2026-06-06 22:53:07 [registrationTask1] INFO  d.c.b.a.c.r.ApplicationRegistrator - Application registered itself as 1a80c6d0798b
+2026-06-06 22:53:07 [boundedElastic-7] INFO  io.lettuce.core.EpollProvider - Starting without optional epoll library
+2026-06-06 22:53:07 [boundedElastic-7] INFO  io.lettuce.core.KqueueProvider - Starting without optional kqueue library

+ 68 - 0
src/main/java/com/zhongzheng/bo/ImportCompanyBo.java

@@ -0,0 +1,68 @@
+package com.zhongzheng.bo;
+
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 用户对象 SysCertificateBo
+ *
+ * @author zhongzheng
+ */
+
+@Data
+@ApiModel("导入员客户实体")
+public class ImportCompanyBo implements Serializable {
+    @Excel(name = "*客户名称")
+    @ApiModelProperty("客户名称")
+    private String companyName;
+
+    @ApiModelProperty("公司ID")
+    private Long companyId;
+
+    @Excel(name = "注册地址")
+    @ApiModelProperty("注册地址")
+    private String regAddress;
+
+    @Excel(name = "法人")
+    @ApiModelProperty("法人")
+    private String legalPerson;
+
+    @Excel(name = "联系电话")
+    @ApiModelProperty("联系电话")
+    private String contactPhone;
+
+    @Excel(name = "联系人")
+    @ApiModelProperty("联系人")
+    private String contactPerson;
+
+    @Excel(name = "所在省")
+    @ApiModelProperty("所在省")
+    private String province;
+
+    @Excel(name = "所在城市")
+    @ApiModelProperty("所在城市")
+    private String city;
+
+    @Excel(name = "所属行业")
+    @ApiModelProperty("所属行业")
+    private String industry;
+
+    @Excel(name = "公司类型")
+    @ApiModelProperty("公司类型")
+    private String companyTypeName;
+
+    @Excel(name = "公司规模")
+    @ApiModelProperty("公司规模")
+    private String companySize;
+
+
+
+    @ApiModelProperty("返回原因")
+    private String cause;
+
+}

+ 60 - 0
src/main/java/com/zhongzheng/bo/ImportCompanyCertBo.java

@@ -0,0 +1,60 @@
+package com.zhongzheng.bo;
+
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 用户对象 SysCertificateBo
+ *
+ * @author zhongzheng
+ */
+
+@Data
+@ApiModel("导入员工实体")
+public class ImportCompanyCertBo implements Serializable {
+
+
+
+    @Excel(name = "*企业名称")
+    @ApiModelProperty("企业名称")
+    private String companyName;
+
+    @ApiModelProperty("公司ID")
+    private String companyId;
+
+
+    @Excel(name = "*证书编号")
+    @ApiModelProperty("证书编号")
+    private String certificateNumber;
+
+    @Excel(name = "*资质等级")
+    @ApiModelProperty("资质等级")
+    private String levelName;
+
+    @Excel(name = "*有效日期")
+    @ApiModelProperty("有效日期")
+    private String expiryDate;
+
+    @Excel(name = "发证日期")
+    @ApiModelProperty("发证日期")
+    private String issueDate;
+
+    @Excel(name = "发证机构")
+    @ApiModelProperty("发证机构")
+    private String issuerName;
+
+    @Excel(name = "是否主项")
+    @ApiModelProperty("是否主项")
+    private String isPrimary;
+
+    @ApiModelProperty("返回原因")
+    private String cause;
+
+
+
+}

+ 72 - 0
src/main/java/com/zhongzheng/bo/ImportPersonBo.java

@@ -0,0 +1,72 @@
+package com.zhongzheng.bo;
+
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 用户对象 SysCertificateBo
+ *
+ * @author zhongzheng
+ */
+
+@Data
+@ApiModel("导入员工实体")
+public class ImportPersonBo implements Serializable {
+
+    /** 真实姓名 */
+    @Excel(name = "*姓名")
+    @ApiModelProperty("员工姓名")
+    private String personName;
+    /** 身份证号 */
+    @Excel(name = "*身份证号码")
+    @ApiModelProperty("身份证号")
+    private String idCard;
+    /** 所在公司 */
+    @ApiModelProperty("企业名称")
+    private String companyName;
+    /** 手机号码 */
+    @Excel(name = "*手机号码")
+    @ApiModelProperty("手机号码")
+    private String phone;
+
+    @Excel(name = "性别")
+    @ApiModelProperty("性别")
+    private String gender;
+
+    @Excel(name = "学历")
+    @ApiModelProperty("学历")
+    private String education;
+
+    @Excel(name = "毕业专业")
+    @ApiModelProperty("毕业专业")
+    private String major;
+
+    @Excel(name = "毕业学校")
+    @ApiModelProperty("毕业学校")
+    private String school;
+
+    @Excel(name = "毕业时间")
+    @ApiModelProperty("毕业时间")
+    private String graduationTime;
+
+    @ApiModelProperty("原因")
+    private String cause;
+
+
+    @Excel(name = "员工编号")
+    @ApiModelProperty("员工编号")
+    private Long personCode;
+
+    @ApiModelProperty("员工Id")
+    private Long personId;
+
+
+
+
+
+}

+ 73 - 0
src/main/java/com/zhongzheng/bo/ImportPersonCertBo.java

@@ -0,0 +1,73 @@
+package com.zhongzheng.bo;
+
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 用户对象 SysCertificateBo
+ *
+ * @author zhongzheng
+ */
+
+@Data
+@ApiModel("导入员工实体")
+public class ImportPersonCertBo implements Serializable {
+
+
+    @Excel(name = "*姓名")
+    @ApiModelProperty("员工姓名")
+    private String personName;
+
+    @Excel(name = "*身份证号")
+    @ApiModelProperty("身份证号")
+    private String idCard;
+
+    @Excel(name = "*所属企业")
+    @ApiModelProperty("所属企业")
+    private String companyName;
+
+    @ApiModelProperty("公司ID")
+    private String companyId;
+
+    @Excel(name = "*证书编号")
+    @ApiModelProperty("证书编号")
+    private String certificateNumber;
+
+    @Excel(name = "证书专业")
+    @ApiModelProperty("证书专业")
+    private String majorName;
+
+    @Excel(name = "发证日期")
+    @ApiModelProperty("发证日期")
+    private String issueDate;
+
+    @Excel(name = "*有效日期")
+    @ApiModelProperty("有效日期")
+    private String expiryDate;
+
+    @Excel(name = "发证机构")
+    @ApiModelProperty("发证机构")
+    private String issuerName;
+
+    @Excel(name = "*证书类型")
+    @ApiModelProperty("证书类型")
+    private String certificateTypeName;
+
+    @Excel(name = "*证书名称")
+    @ApiModelProperty("证书名称")
+    private String certificateTypeName2;
+
+    @ApiModelProperty("员工Id")
+    private Long personId;
+
+    @ApiModelProperty("返回原因")
+    private String cause;
+
+
+
+}

+ 36 - 0
src/main/java/com/zhongzheng/bo/MemoCertRequest.java

@@ -0,0 +1,36 @@
+package com.zhongzheng.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.NotNull;
+import javax.xml.soap.Text;
+
+/**
+ * @author change
+ * @date 2026年05月25日 9:07
+ */
+@Data
+@ApiModel("证书预警处理标识")
+public class MemoCertRequest {
+
+    @ApiModelProperty("企业ID")
+    private Long companyId;
+
+    @ApiModelProperty("证书类型")
+    private Integer certificateTypeId;
+
+    @ApiModelProperty("用户ID")
+    private Long userId;
+
+    @ApiModelProperty("备注")
+    private String content;
+
+    @ApiModelProperty("状态,1已处理,2取消")
+    private Integer status;
+
+    @ApiModelProperty("备忘录标题")
+    private  String Title;
+}

+ 1 - 0
src/main/java/com/zhongzheng/common/croe/CustomTenantLineHandler.java

@@ -48,6 +48,7 @@ public class CustomTenantLineHandler implements TenantLineHandler {
         add("sys_certificate_addition");
         add("certificate_major");
         add("sys_certificate_type");
+        add("memo_certificate");
     }};
 
     /**

+ 1 - 1
src/main/java/com/zhongzheng/common/util/EasyPoiUtil.java

@@ -166,7 +166,7 @@ public class EasyPoiUtil {
         } catch (NoSuchElementException e) {
             throw new RuntimeException("excel文件不能为空");
         } catch (Exception e) {
-            throw new RuntimeException("导入的文件不正确,请重新导入!");
+            throw new RuntimeException("导入的文件不正确,请重新导入!"+e.getMessage());
 
         }
         return list;

+ 101 - 6
src/main/java/com/zhongzheng/controller/SysCompanyController.java

@@ -3,8 +3,7 @@ package com.zhongzheng.controller;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.zhongzheng.bo.SysCertificateBo;
-import com.zhongzheng.bo.SysDictTypeBo;
+import com.zhongzheng.bo.*;
 import com.zhongzheng.common.croe.BaseController;
 import com.zhongzheng.common.croe.LoginUser;
 import com.zhongzheng.common.filter.CustomException;
@@ -12,18 +11,22 @@ import com.zhongzheng.common.filter.UserConstants;
 import com.zhongzheng.common.model.AjaxResult;
 import com.zhongzheng.common.model.TableDataInfo;
 import com.zhongzheng.common.model.TokenService;
-import com.zhongzheng.common.util.DateUtils;
-import com.zhongzheng.common.util.SecurityUtils;
-import com.zhongzheng.common.util.ServletUtils;
-import com.zhongzheng.common.util.ToolsUtils;
+import com.zhongzheng.common.util.*;
 import com.zhongzheng.domian.*;
 import com.zhongzheng.service.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.MutablePropertyValues;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import static net.sf.jsqlparser.util.validation.metadata.NamedObject.user;
 
@@ -50,6 +53,8 @@ public class SysCompanyController extends BaseController {
     @Autowired
     private ISysCertificateService certService;
 
+    @Autowired
+    private ISysCertificateAdditionService certAddService;
     @Autowired
     private ICertificateMajorService majorService;
 
@@ -60,6 +65,10 @@ public class SysCompanyController extends BaseController {
     private ISysCertificateAdditionService additionService;
 
 
+    @Autowired
+    private IMemoService memoService;
+
+
     @ApiOperation("客户列表")
     @GetMapping("/list")
     public TableDataInfo<SysCompany> list(SysCompany model) {
@@ -283,6 +292,92 @@ public class SysCompanyController extends BaseController {
     }
 
 
+    @ApiOperation("证书预警列表")
+    @GetMapping("/cert/warningList")
+    public TableDataInfo<SysCertificate> cert_warning_list(SysCertificateBo model) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        model.setUserId(loginUser.getUser().getUserId());
+        //model.setCertificateTypeId(3);
+        //model.setUserId(1L);
+        return certService.selectEnterpriseWarningCerList(model);
+    }
+
+    @ApiOperation("员工批量导入")
+    @PostMapping("/person/import")
+    public AjaxResult<Map<String,Object>> ImportPerson(MultipartFile file,Long companyId)  throws Exception {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        List<ImportPersonBo> personlist =  EasyPoiUtil. importExcel(file, 0, 1,ImportPersonBo.class);
+
+        Map<String,Object> result = personService.importPerson(personlist,companyId,loginUser.getUser().getUserId());
+        return   AjaxResult.success(result);
+    }
+
+
+    @ApiOperation("我的客户批量导入")
+    @PostMapping("/import")
+    public AjaxResult<Map<String,Object>> ImportCompany(MultipartFile file,Long companyId)  throws Exception {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        List<ImportCompanyBo> companylist =  EasyPoiUtil. importExcel(file, 0, 1,ImportCompanyBo.class);
+
+        Map<String,Object> result = companyService.importCompany(companylist,loginUser.getUser().getUserId());
+        return   AjaxResult.success(result);
+    }
+
+
+    @ApiOperation("证书预警处理")
+    @PostMapping("/memo/do_warning")
+    public AjaxResult memo_add_warning(@RequestBody MemoCertRequest model) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        model.setUserId(loginUser.getUser().getUserId());
+        return toAjax(memoService.insertMemoByWarning(model)>0);
+    }
+
+
+    @ApiOperation("员工证书批量导入")
+    @PostMapping("/cert/person_import")
+    public AjaxResult<Map<String,Object>> ImportPersonCert(MultipartFile file,Long companyId)  throws Exception {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        List<ImportPersonCertBo> personCertlist =  EasyPoiUtil. importExcel(file, 0, 1,ImportPersonCertBo.class);
+        Map<String,Object> result = certService.importPersonCert(personCertlist,companyId,loginUser.getUser().getUserId(),2);
+        return   AjaxResult.success(result);
+    }
+    @ApiOperation("企业证书批量导入")
+    @PostMapping("/cert/enterprise_import")
+    public AjaxResult<Map<String,Object>> ImportEnterpriseCert(MultipartFile file,Integer certificateType)  throws Exception {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        List<ImportCompanyCertBo> certlist =  EasyPoiUtil. importExcel(file, 0, 1,ImportCompanyCertBo.class);
+        Map<String,Object> result = certService.importCompanyCert(certlist,0L,loginUser.getUser().getUserId(),certificateType);
+        return   AjaxResult.success(result);
+    }
+
+    @ApiOperation("个人证书预警详细")
+    @GetMapping("/cert/person_warning_detail")
+    public TableDataInfo<SysCertificate> cert_person_warning_detail_list(SysCertificateBo model) {
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        model.setUserId(loginUser.getUser().getUserId());
+        model.setWarningState(1);
+        model.setCertificateTypeId2(model.getCertificateTypeId());
+        model.setCertificateTypeId(null);
+
+        return  certAddService.selectPersonWarningList (model);
+    }
+
+    @ApiOperation("企业证书预警详细")
+    @GetMapping("/cert/Enterprise_warning_detail")
+    public TableDataInfo<SysCertificate> cert_Enterprise_warning_detail_list(SysCertificateBo model) {
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        model.setUserId(loginUser.getUser().getUserId());
+        model.setWarningState(1);
+
+        return  certAddService.selectEnterpriseWarningList (model);
+    }
+
+
+
+
+
 
 
 

+ 127 - 0
src/main/java/com/zhongzheng/domian/Memo.java

@@ -0,0 +1,127 @@
+package com.zhongzheng.domian;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhongzheng.common.util.EncryptHandler;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 用户对象 sys_company
+ *
+ * @author zhongzheng
+ */
+
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName(value ="memo",autoResultMap = true)
+public class Memo implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "memo_id",type = IdType.AUTO)
+    private Long memoId;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    /**
+     * 分类类型 1日常,2证书预警
+     */
+    private Long categoryType;
+
+    /**
+     * 状态 1正常 -1删除
+     */
+    private Integer status;
+
+    /**
+     * 是否置顶 0否1置顶
+     */
+    private Integer isTop;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 提醒时间
+     */
+    private Long tipTime;
+
+    /**
+     * 创建时间
+     */
+    private Long createTime;
+
+    /**
+     * 更新时间
+     */
+    private Long updateTime;
+
+    /**
+     * 企业ID
+     */
+    private Long companyId;
+
+    /**
+     * 机构ID
+     */
+    private Long tenantId;
+
+    /**
+     * 证书类型
+     */
+    @TableField(exist = false)
+    private  Integer certificateTypeId;
+
+
+
+
+
+
+    /** 分页大小 */
+    @ApiModelProperty("分页大小")
+    @TableField(exist = false)
+    private Integer pageSize;
+
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    @TableField(exist = false)
+    private Integer pageNum;
+
+    /**
+     * 请求参数
+     */
+    @TableField(exist = false)
+    private Map<String, Object> params = new HashMap<>();
+
+
+
+
+
+
+
+
+}

+ 78 - 0
src/main/java/com/zhongzheng/domian/MemoCertificate.java

@@ -0,0 +1,78 @@
+package com.zhongzheng.domian;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 用户对象 sys_company
+ *
+ * @author zhongzheng
+ */
+
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName(value ="memo",autoResultMap = true)
+public class MemoCertificate implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "memo_certificate_id",type = IdType.AUTO)
+    private Long memoCertificateId;
+
+    /**
+     * 备忘录ID
+     */
+    private Long memoId;
+
+    /**
+     * 证书ID
+     */
+    private Long certificateAdditionId;
+
+    /**
+     * 创建时间
+     */
+    private Long createTime;
+
+
+
+
+    /** 分页大小 */
+    @ApiModelProperty("分页大小")
+    @TableField(exist = false)
+    private Integer pageSize;
+
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    @TableField(exist = false)
+    private Integer pageNum;
+
+    /**
+     * 请求参数
+     */
+    @TableField(exist = false)
+    private Map<String, Object> params = new HashMap<>();
+
+
+
+
+
+
+
+
+}

+ 15 - 0
src/main/java/com/zhongzheng/domian/SysCertificate.java

@@ -168,6 +168,21 @@ public class SysCertificate implements Serializable
     @TableField(exist = false)
     private  MajorVo[] majorVoList;
 
+    /**
+     * 增项ID
+     */
+    @TableField(exist = false)
+    private  Long certificateAdditionId;
+
+
+    /**
+     * 证书预警数量
+     */
+    @TableField(exist = false)
+    private  Integer  warningCount;
+
+
+
     /**
      * 学员名称
      */

+ 9 - 0
src/main/java/com/zhongzheng/domian/SysPerson.java

@@ -145,6 +145,15 @@ public class SysPerson implements Serializable
      */
     private long modifier;
 
+    /**
+     * 毕业学校
+     */
+    private String school;
+
+    /**
+     * 毕业时间
+     */
+    private long graduationTime;
 
 
 

+ 19 - 0
src/main/java/com/zhongzheng/mapper/MemoCertificateMapper.java

@@ -0,0 +1,19 @@
+package com.zhongzheng.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.domian.Memo;
+import com.zhongzheng.domian.MemoCertificate;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 字典表 数据层
+ *
+ * @author zhongzheng
+ */
+@Mapper
+public interface MemoCertificateMapper extends BaseMapper<MemoCertificate> {
+
+
+
+}
+

+ 19 - 0
src/main/java/com/zhongzheng/mapper/MemoMapper.java

@@ -0,0 +1,19 @@
+package com.zhongzheng.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.domian.Memo;
+import com.zhongzheng.domian.SysCertificateType;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 字典表 数据层
+ *
+ * @author zhongzheng
+ */
+@Mapper
+public interface MemoMapper extends BaseMapper<Memo> {
+
+
+
+}
+

+ 4 - 0
src/main/java/com/zhongzheng/mapper/SysCertificateAdditionMapper.java

@@ -1,9 +1,13 @@
 package com.zhongzheng.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhongzheng.bo.SysCertificateBo;
 import com.zhongzheng.domian.SysCertificate;
 import com.zhongzheng.domian.SysCertificateAddition;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 字典表 数据层

+ 17 - 0
src/main/java/com/zhongzheng/mapper/SysCertificateMapper.java

@@ -32,5 +32,22 @@ public interface SysCertificateMapper extends BaseMapper<SysCertificate> {
      */
     IPage<SysCertificate> selectEnterpriseCerList(Page page, @Param("cet") SysCertificateBo cet);
 
+    /**
+     *证书预警列表
+     */
+    IPage<SysCertificate> selectEnterpriseWarningCerList(Page page, @Param("cet") SysCertificateBo cet);
+
+    /**
+     *
+     * @param page
+     * @param cet
+     * @return  预警数据证书
+     */
+    IPage<SysCertificate> selectCerAdditionList(Page page, @Param("cet") SysCertificateBo cet);
+
+
+    IPage<SysCertificate> selectEnterpriseCerAdditionList(Page page, @Param("cet") SysCertificateBo cet);
+
+
 }
 

+ 1 - 0
src/main/java/com/zhongzheng/service/ICertificateMajorService.java

@@ -19,6 +19,7 @@ public interface ICertificateMajorService extends IService<CertificateMajor> {
 
     CertificateMajor  selectCertificateMajorById(int certificateMajorId);
 
+    CertificateMajor  selectCertificateMajorByName(int typeid,String majorName);
 }
 
 

+ 18 - 0
src/main/java/com/zhongzheng/service/IMemoCertificateService.java

@@ -0,0 +1,18 @@
+package com.zhongzheng.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.domian.Memo;
+import com.zhongzheng.domian.MemoCertificate;
+
+/**
+ * 菜单 业务层
+ *
+ * @author zhongzheng
+ */
+public interface IMemoCertificateService extends IService<MemoCertificate> {
+
+
+
+}
+
+

+ 24 - 0
src/main/java/com/zhongzheng/service/IMemoService.java

@@ -0,0 +1,24 @@
+package com.zhongzheng.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.bo.MemoCertRequest;
+import com.zhongzheng.bo.SysCertificateBo;
+import com.zhongzheng.common.model.TableDataInfo;
+import com.zhongzheng.domian.CertificateMajor;
+import com.zhongzheng.domian.Memo;
+
+/**
+ * 菜单 业务层
+ *
+ * @author zhongzheng
+ */
+public interface IMemoService extends IService<Memo> {
+
+    public  long insertMemo(Memo entity);
+
+    public  Integer insertMemoByWarning(MemoCertRequest entity);
+
+
+}
+
+

+ 5 - 3
src/main/java/com/zhongzheng/service/ISysCertificateAdditionService.java

@@ -2,6 +2,8 @@ package com.zhongzheng.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhongzheng.bo.SysCertificateBo;
+import com.zhongzheng.common.model.TableDataInfo;
+import com.zhongzheng.domian.SysCertificate;
 import com.zhongzheng.domian.SysCertificateAddition;
 
 import java.util.List;
@@ -25,11 +27,11 @@ public interface ISysCertificateAdditionService extends IService<SysCertificateA
 
     public List<SysCertificateAddition> selectCertificateAdditionByCertIds(List<Long> ids);
 
+    public void IntCertificateAdditionByTypeIdAndCompanyId(Long companyId,Integer certTypeId,Long momoId);
+    public TableDataInfo<SysCertificate> selectPersonWarningList(SysCertificateBo entity) ;
 
 
-
-
-
+    public TableDataInfo<SysCertificate> selectEnterpriseWarningList(SysCertificateBo entity) ;
 
 
 

+ 16 - 0
src/main/java/com/zhongzheng/service/ISysCertificateService.java

@@ -1,12 +1,18 @@
 package com.zhongzheng.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.bo.ImportCompanyCertBo;
+import com.zhongzheng.bo.ImportPersonBo;
+import com.zhongzheng.bo.ImportPersonCertBo;
 import com.zhongzheng.bo.SysCertificateBo;
 import com.zhongzheng.common.model.TableDataInfo;
 import com.zhongzheng.domian.SysCertificate;
 import com.zhongzheng.domian.SysCompany;
 import com.zhongzheng.domian.SysPerson;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 菜单 业务层
  *
@@ -32,6 +38,13 @@ public interface ISysCertificateService extends IService<SysCertificate> {
      */
     public TableDataInfo<SysCertificate> selectEnterpriseCerList(SysCertificateBo entity);
 
+    /**
+     * 企业证书列表
+     * @param entity
+     * @return
+     */
+    public TableDataInfo<SysCertificate> selectEnterpriseWarningCerList(SysCertificateBo entity);
+
 
 
     public  SysCertificate selectCertificateById(Integer id);
@@ -46,6 +59,9 @@ public interface ISysCertificateService extends IService<SysCertificate> {
 
     public  void  CertificateWarning();
 
+    public Map<String, Object> importPersonCert(List<ImportPersonCertBo> personList, Long companyId, Long userId,Integer certType) ;
+
+    public Map<String, Object> importCompanyCert(List<ImportCompanyCertBo> personList, Long companyId, Long userId, Integer certType) ;
 
 
 

+ 2 - 0
src/main/java/com/zhongzheng/service/ISysCertificateTypeService.java

@@ -27,6 +27,8 @@ public interface ISysCertificateTypeService extends IService<SysCertificateType>
 
     public  SysCertificateType selectCertificateById(Integer id);
 
+    public  SysCertificateType selectCertificateByName(String typeName);
+
 
 
 

+ 4 - 1
src/main/java/com/zhongzheng/service/ISysCompanyService.java

@@ -2,6 +2,8 @@ package com.zhongzheng.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.bo.ImportCompanyBo;
+import com.zhongzheng.bo.ImportPersonBo;
 import com.zhongzheng.common.model.TableDataInfo;
 import com.zhongzheng.domian.SysCompany;
 
@@ -10,6 +12,7 @@ import com.zhongzheng.vo.RouterVo;
 import com.zhongzheng.vo.TreeSelect;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -54,7 +57,7 @@ public interface ISysCompanyService extends IService<SysCompany> {
 
     public List<SysCompany> selectCompanyByUserid(long userid) ;
 
-
+    public Map<String, Object> importCompany(List<ImportCompanyBo> companyList, long userId);
 
 
 

+ 7 - 0
src/main/java/com/zhongzheng/service/ISysPersonService.java

@@ -1,11 +1,13 @@
 package com.zhongzheng.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.bo.ImportPersonBo;
 import com.zhongzheng.common.model.TableDataInfo;
 import com.zhongzheng.domian.SysCompany;
 import com.zhongzheng.domian.SysPerson;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 菜单 业务层
@@ -39,4 +41,9 @@ public interface ISysPersonService extends IService<SysPerson> {
 
 
     public  SysPerson getPersonByNameAndNoInert(SysPerson entity);
+
+
+    public  SysPerson getPersonByIdCardAndNoInert(SysPerson entity);
+
+    public Map<String, Object> importPerson(List<ImportPersonBo> personList,long companyId,long userId);
 }

+ 8 - 0
src/main/java/com/zhongzheng/service/impl/CertificateMajorServiceImpl.java

@@ -79,4 +79,12 @@ public class CertificateMajorServiceImpl extends ServiceImpl<CertificateMajorMap
                 .eq(CertificateMajor::getStatus, 1));
 
     }
+
+    @Override
+    public CertificateMajor selectCertificateMajorByName(int typeId,String majorName) {
+        return getOne(new LambdaUpdateWrapper<CertificateMajor>()
+                .eq(CertificateMajor::getMajorName, majorName)
+                .eq(CertificateMajor::getCertificateTypeId, typeId)
+                .eq(CertificateMajor::getStatus, 1));
+    }
 }

+ 30 - 0
src/main/java/com/zhongzheng/service/impl/MemoCertificateServiceImpl.java

@@ -0,0 +1,30 @@
+package com.zhongzheng.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.common.filter.CustomException;
+import com.zhongzheng.domian.Memo;
+import com.zhongzheng.domian.MemoCertificate;
+import com.zhongzheng.mapper.MemoCertificateMapper;
+import com.zhongzheng.mapper.MemoMapper;
+import com.zhongzheng.service.IMemoCertificateService;
+import com.zhongzheng.service.IMemoService;
+import com.zhongzheng.service.ISysCertificateService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 菜单 业务层处理
+ *
+ * @author zhongzheng
+ */
+@Service
+public class MemoCertificateServiceImpl extends ServiceImpl<MemoCertificateMapper, MemoCertificate> implements IMemoCertificateService {
+    public static final String PREMISSION_STRING = "perms[\"{0}\"]";
+
+    @Autowired
+    private MemoCertificateMapper memoCertMapper;
+
+
+
+
+}

+ 75 - 0
src/main/java/com/zhongzheng/service/impl/MemoServiceImpl.java

@@ -0,0 +1,75 @@
+package com.zhongzheng.service.impl;
+
+import cn.hutool.http.HttpStatus;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.bo.MemoCertRequest;
+import com.zhongzheng.common.filter.CustomException;
+import com.zhongzheng.common.model.TableDataInfo;
+import com.zhongzheng.common.util.DateUtils;
+import com.zhongzheng.domian.CertificateMajor;
+import com.zhongzheng.domian.Memo;
+import com.zhongzheng.domian.SysCertificateType;
+import com.zhongzheng.mapper.*;
+import com.zhongzheng.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 菜单 业务层处理
+ *
+ * @author zhongzheng
+ */
+@Service
+public class MemoServiceImpl extends ServiceImpl<MemoMapper, Memo> implements IMemoService{
+    public static final String PREMISSION_STRING = "perms[\"{0}\"]";
+
+    @Autowired
+    private MemoMapper memoMapper;
+
+    @Autowired
+    private ISysCertificateService sysCertSeaService;
+
+    @Autowired
+    private ISysCertificateAdditionService certadditionService;
+
+    @Autowired
+    private ISysCertificateTypeService certTypeSeaService;
+
+    @Override
+    public long insertMemo(Memo entity) {
+        if(entity.getTitle() == null || entity.getTitle().isEmpty()){
+            throw new CustomException("备忘录标题不能为空");
+        }
+        return memoMapper.insert(entity);
+    }
+
+    @Override
+    public Integer insertMemoByWarning(MemoCertRequest entity) {
+
+
+        Memo memo = new Memo();
+        memo.setContent(entity.getContent());
+        memo.setTitle(entity.getTitle());
+        memo.setCreateTime(DateUtils.getNowTime());
+        memo.setCategoryType(2L);
+        String title="";
+        SysCertificateType certType=certTypeSeaService.getById(entity.getCertificateTypeId());
+        title=certType.getCertificateTypeName()+"预警";
+
+        if(entity.getStatus()==1)
+        {
+            title+="已处理";
+        }else {
+            title+="已取消";
+        }
+
+        Integer i = memoMapper.insert(memo);
+        certadditionService.IntCertificateAdditionByTypeIdAndCompanyId(entity.getCompanyId(), entity.getCertificateTypeId(), memo.getMemoId());
+        return i;
+
+    }
+}

+ 121 - 7
src/main/java/com/zhongzheng/service/impl/SysCertificateAdditionServiceImpl.java

@@ -1,24 +1,30 @@
 package com.zhongzheng.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zhongzheng.bo.SysCertificateBo;
 import com.zhongzheng.common.filter.CustomException;
+import com.zhongzheng.common.model.TableDataInfo;
 import com.zhongzheng.common.util.DateUtils;
+import com.zhongzheng.common.util.EncryptHandler;
 import com.zhongzheng.domian.*;
-import com.zhongzheng.mapper.SysCertificateAdditionMapper;
-import com.zhongzheng.mapper.SysCertificateMapper;
-import com.zhongzheng.mapper.SysPersonMapper;
+import com.zhongzheng.mapper.*;
 import com.zhongzheng.service.ISysCertificateAdditionService;
 import com.zhongzheng.service.ISysCertificateService;
 import com.zhongzheng.service.ISysCompanyService;
 import com.zhongzheng.service.ISysPersonService;
+import com.zhongzheng.vo.MajorVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 菜单 业务层处理
@@ -46,6 +52,9 @@ public class SysCertificateAdditionServiceImpl extends ServiceImpl<SysCertificat
     @Autowired
     private SysCertificateAdditionMapper certAddMapper;
 
+    @Autowired
+    private MemoCertificateMapper  memoCertMapper;
+
     @Override
     public long insertCertificateAddition(SysCertificateBo entity) {
         SysCertificateAddition p =null;
@@ -68,10 +77,13 @@ public class SysCertificateAdditionServiceImpl extends ServiceImpl<SysCertificat
         model.setCreateTime(DateUtils.getNowTime());
         model.setMajorId(entity.getMajorId());
         model.setCreator(entity.getUserId());
-        model.setIsPrimary(0);
-        if(p2==null)
-        {
-            model.setIsPrimary(1);
+        if(entity.getCertificateType()!=3) {
+            model.setIsPrimary(0);
+            if (p2 == null) {
+                model.setIsPrimary(1);
+            }
+        }else {
+            model.setIsPrimary(entity.getIsPrimary());
         }
        return   certAddMapper.insert(model);
     }
@@ -86,6 +98,10 @@ public class SysCertificateAdditionServiceImpl extends ServiceImpl<SysCertificat
         model.setCreateTime(DateUtils.getNowTime());
         model.setStatus(1);
         model.setMajorId(entity.getMajorId());
+        if(entity.getIsPrimary()>=0){
+            model.setIsPrimary(entity.getIsPrimary());
+        }
+
 
         model.setMajorName(entity.getMajorName());
         model.setCertificateAdditionId(entity.getCertificateAdditionId());
@@ -135,5 +151,103 @@ public class SysCertificateAdditionServiceImpl extends ServiceImpl<SysCertificat
 
     }
 
+    @Override
+    public void IntCertificateAdditionByTypeIdAndCompanyId(Long companyId, Integer certTypeId,Long momoId) {
+
+        SysCertificateBo entity = new SysCertificateBo();
+        entity.setCompanyId(companyId);
+        entity.setCertificateTypeId2(certTypeId);
+        entity.setWarningState(1);
+        entity.setPageNum(1);
+        entity.setPageSize(10000);
+        IPage<SysCertificate> pageinfo = certMapper.selectCerAdditionList(new Page<>(entity.getPageNum(), entity.getPageSize()), entity);
+
+        pageinfo.getRecords().forEach(record -> {
+            SysCertificateAddition model = new SysCertificateAddition();
+            model.setCertificateAdditionId(record.getCertificateAdditionId());
+            model.setWarningState(2);
+           certAddMapper.updateById(model) ;
+            MemoCertificate mCert=new MemoCertificate();
+            mCert.setMemoId(momoId);
+            mCert.setCertificateAdditionId(record.getCertificateAdditionId());
+            mCert.setCreateTime(DateUtils.getNowTime());
+        });
+
+
+
+    }
+
+    @Override
+    public TableDataInfo<SysCertificate> selectPersonWarningList(SysCertificateBo entity) {
+        if (ObjectUtil.isEmpty(entity.getPageSize()) || entity.getPageSize() < 1) {
+            entity.setPageSize(-1);
+            entity.setPageNum(1);
+        }
+        if(StringUtils.isNotBlank(entity.getCompanyName())){
+            SysCompany company = sysCompanyService.selectCompanyByName(entity.getCompanyName(),entity.getUserId());
+            if(ObjectUtil.isEmpty(company)){
+                return new TableDataInfo<>();
+            }
+            entity.setCompanyId(entity.getCompanyId());
+        }
+        if(StringUtils.isNotBlank(entity.getPersonName())) {
+            List<SysCompany> c_list = sysCompanyService.selectCompanyByUserid(entity.getUserId());
+            if (c_list.isEmpty()) {
+                return new TableDataInfo<>();
+            }
+            List<Long> companyIdList = c_list.stream().map(SysCompany::getCompanyId).collect(Collectors.toList());
+            List<SysPerson> p_list = sysPersonService.selectPersonByName(entity.getPersonName(), companyIdList);
+            if (p_list != null && p_list.size() == 0) {
+                return new TableDataInfo<>();
+            }
+            List<Long> uids = p_list.stream().map(SysPerson::getPersonId).collect(Collectors.toList());
+            entity.setPersonIds(uids);
+        }
+
+        IPage<SysCertificate> pageinfo = certMapper.selectCerAdditionList(new Page<>(entity.getPageNum(), entity.getPageSize()), entity);
+        TableDataInfo<SysCertificate> info = new TableDataInfo();
+        info.setTotal(pageinfo.getTotal());
+        info.setRows(pageinfo.getRecords());
+        return info;
+    }
+
+
+
+    @Override
+    public TableDataInfo<SysCertificate> selectEnterpriseWarningList(SysCertificateBo entity) {
+        if (ObjectUtil.isEmpty(entity.getPageSize()) || entity.getPageSize() < 1) {
+            entity.setPageSize(-1);
+            entity.setPageNum(1);
+        }
+        if(StringUtils.isNotBlank(entity.getCompanyName())){
+            SysCompany company = sysCompanyService.selectCompanyByName(entity.getCompanyName(),entity.getUserId());
+            if(ObjectUtil.isEmpty(company)){
+                return new TableDataInfo<>();
+            }
+            entity.setCompanyId(entity.getCompanyId());
+        }
+        if(StringUtils.isNotBlank(entity.getPersonName())) {
+            List<SysCompany> c_list = sysCompanyService.selectCompanyByUserid(entity.getUserId());
+            if (c_list.isEmpty()) {
+                return new TableDataInfo<>();
+            }
+            List<Long> companyIdList = c_list.stream().map(SysCompany::getCompanyId).collect(Collectors.toList());
+            List<SysPerson> p_list = sysPersonService.selectPersonByName(entity.getPersonName(), companyIdList);
+            if (p_list != null && p_list.size() == 0) {
+                return new TableDataInfo<>();
+            }
+            List<Long> uids = p_list.stream().map(SysPerson::getPersonId).collect(Collectors.toList());
+            entity.setPersonIds(uids);
+        }
+
+        IPage<SysCertificate> pageinfo = certMapper.selectEnterpriseCerAdditionList(new Page<>(entity.getPageNum(), entity.getPageSize()), entity);
+        TableDataInfo<SysCertificate> info = new TableDataInfo();
+        info.setTotal(pageinfo.getTotal());
+        info.setRows(pageinfo.getRecords());
+        return info;
+    }
+
+
+
 
 }

+ 443 - 3
src/main/java/com/zhongzheng/service/impl/SysCertificateServiceImpl.java

@@ -1,19 +1,27 @@
 package com.zhongzheng.service.impl;
 
+import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.http.HttpStatus;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.bo.ImportCompanyCertBo;
+import com.zhongzheng.bo.ImportPersonBo;
+import com.zhongzheng.bo.ImportPersonCertBo;
 import com.zhongzheng.bo.SysCertificateBo;
 import com.zhongzheng.common.filter.CustomException;
 import com.zhongzheng.common.model.TableDataInfo;
 import com.zhongzheng.common.util.DateUtils;
 import com.zhongzheng.common.util.EncryptHandler;
+import com.zhongzheng.common.util.ServletUtils;
 import com.zhongzheng.domian.*;
+import com.zhongzheng.mapper.SysCertificateAdditionMapper;
 import com.zhongzheng.mapper.SysCertificateMapper;
 import com.zhongzheng.mapper.SysPersonMapper;
 import com.zhongzheng.service.*;
@@ -21,7 +29,9 @@ import com.zhongzheng.vo.MajorVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -51,6 +61,9 @@ public class SysCertificateServiceImpl extends ServiceImpl<SysCertificateMapper,
     @Autowired
     private ISysCertificateAdditionService certadditionService;
 
+    @Autowired
+    private SysCertificateAdditionMapper certAddMapper;
+
     @Autowired
     private ISysCertificateTypeService certTypeSeaService;
 
@@ -126,6 +139,7 @@ public class SysCertificateServiceImpl extends ServiceImpl<SysCertificateMapper,
                     majorVos[i].setMajorName(m.getMajorName());
                     majorVos[i].setCertificateAdditionId(m.getCertificateAdditionId());
                     majorVos[i].setExpiryDate(m.getExpiryDate());
+                    i++;
                 }
 
                 element.setMajorVoList(majorVos);
@@ -225,6 +239,53 @@ public class SysCertificateServiceImpl extends ServiceImpl<SysCertificateMapper,
         IPage<SysCertificate> pageinfo = certMapper.selectEnterpriseCerList(new Page<>(entity.getPageNum(), entity.getPageSize()), entity);
         TableDataInfo<SysCertificate> info = new TableDataInfo();
 
+        if(pageinfo.getRecords().size()>0) {
+            List<Long> cetList = pageinfo.getRecords().stream().map(SysCertificate::getCertificateId).collect(Collectors.toList());
+            List<SysCertificateAddition> cetAddList= certadditionService.selectCertificateAdditionByCertIds(cetList);
+
+            for (SysCertificate element : pageinfo.getRecords()) {
+                if(element.getCertificateType()==2) {
+                    List<SysCertificateAddition> arraylist = cetAddList.stream().filter(cet -> cet.getCertificateId().equals(element.getCertificateId())).collect(Collectors.toList());
+                    MajorVo[] majorVos = new MajorVo[arraylist.size()];
+                    int i = 0;
+                    for (SysCertificateAddition m : arraylist) {
+                        majorVos[i] = new MajorVo();
+                        majorVos[i].setMajorId(m.getMajorId());
+                        majorVos[i].setMajorName(m.getMajorName());
+                        majorVos[i].setCertificateAdditionId(m.getCertificateAdditionId());
+                        majorVos[i].setExpiryDate(m.getExpiryDate());
+                    }
+                    element.setMajorVoList(majorVos);
+                }
+            }
+        }
+        info.setTotal(pageinfo.getTotal());
+        info.setRows(pageinfo.getRecords());
+
+        return info;
+    }
+    /**
+     * 企业证书列表
+     * @param entity
+     * @return
+     */
+    @Override
+    public TableDataInfo<SysCertificate> selectEnterpriseWarningCerList(SysCertificateBo entity) {
+        if (ObjectUtil.isEmpty(entity.getPageSize()) || entity.getPageSize() < 1) {
+            entity.setPageSize(-1);
+            entity.setPageNum(1);
+        }
+        if(StringUtils.isNotBlank(entity.getCompanyName())){
+            SysCompany company = sysCompanyService.selectCompanyByName(entity.getCompanyName(),entity.getUserId());
+            if(ObjectUtil.isEmpty(company)){
+                return new TableDataInfo<>();
+            }
+            entity.setCompanyId(entity.getCompanyId());
+        }
+
+        IPage<SysCertificate> pageinfo = certMapper.selectEnterpriseWarningCerList(new Page<>(entity.getPageNum(), entity.getPageSize()), entity);
+        TableDataInfo<SysCertificate> info = new TableDataInfo();
+
         if(pageinfo.getRecords().size()>0) {
             List<Long> cetList = pageinfo.getRecords().stream().map(SysCertificate::getCertificateId).collect(Collectors.toList());
             List<SysCertificateAddition> cetAddList= certadditionService.selectCertificateAdditionByCertIds(cetList);
@@ -249,6 +310,7 @@ public class SysCertificateServiceImpl extends ServiceImpl<SysCertificateMapper,
         return info;
     }
 
+
     @Override
     public SysCertificate selectCertificateById(Integer id) {
         return null;
@@ -303,7 +365,7 @@ public class SysCertificateServiceImpl extends ServiceImpl<SysCertificateMapper,
         if(info==null)
         {
             SysCertificate model = new SysCertificate();
-            model.setCertificateType(entity.getCertificateTypeId());
+            model.setCertificateType(entity.getCertificateType());
             model.setCertificateName(entity.getCertificateName());
             model.setUserId(entity.getUserId());
             model.setCertificateTypeId2(entity.getCertificateTypeId2());
@@ -315,7 +377,9 @@ public class SysCertificateServiceImpl extends ServiceImpl<SysCertificateMapper,
             model.setCreateTime(DateUtils.getNowTime());
             model.setIssuerName(entity.getIssuerName());
             model.setIssueDate(entity.getIssueDate());
+            model.setExpiryDate(entity.getExpiryDate());
             model.setIsPrimary(entity.getIsPrimary());
+
             model.setStatus(1);
             if(entity.getMajorId()>0)
             {
@@ -352,6 +416,7 @@ public class SysCertificateServiceImpl extends ServiceImpl<SysCertificateMapper,
             certModel.setUserId(entity.getUserId());
             certModel.setCompanyId(entity.getCompanyId());
             certModel.setCertificateId(certificateId);
+            certModel.setIsPrimary(entity.getIsPrimary());
             certModel.setExpiryDate(entity.getExpiryDate());
             certModel.setIsHasMajor(0);
             certadditionService.updateCertificateAddition(certModel, entity.getUserId());
@@ -367,6 +432,7 @@ public class SysCertificateServiceImpl extends ServiceImpl<SysCertificateMapper,
                 certModel.setCertificateId(certificateId);
                 certModel.setExpiryDate(element.getExpiryDate());
                 certModel.setMajorId(element.getMajorId());
+                certModel.setIsPrimary(entity.getIsPrimary());
                CertificateMajor major= majorService.selectCertificateMajorById(element.getMajorId());
                 certModel.setMajorName(major.getMajorName());
                 certadditionService.updateCertificateAddition(certModel, entity.getUserId());
@@ -400,7 +466,7 @@ public class SysCertificateServiceImpl extends ServiceImpl<SysCertificateMapper,
 
 
         SysCertificate model = new SysCertificate();
-        model.setCertificateType(entity.getCertificateTypeId());
+        model.setCertificateType(entity.getCertificateType());
         model.setCertificateName(entity.getCertificateName());
         model.setUserId(entity.getUserId());
 
@@ -413,6 +479,7 @@ public class SysCertificateServiceImpl extends ServiceImpl<SysCertificateMapper,
         model.setCreateTime(DateUtils.getNowTime());
         model.setIssuerName(entity.getIssuerName());
         model.setIssueDate(entity.getIssueDate());
+        model.setExpiryDate(entity.getExpiryDate());
         model.setIsPrimary(entity.getIsPrimary());
         model.setStatus(1);
         SysCertificateType sysCertificateType=certTypeSeaService.selectCertificateById(entity.getCertificateTypeId());
@@ -526,4 +593,377 @@ public class SysCertificateServiceImpl extends ServiceImpl<SysCertificateMapper,
 
 
     }
+
+    @Override
+    public Map<String, Object> importPersonCert(List<ImportPersonCertBo> personCertList, Long companyId, Long userId,Integer certType) {
+        if (CollectionUtils.isEmpty(personCertList)) {
+            throw new IllegalArgumentException("请勿导入空表格");
+        }
+        List<ImportPersonCertBo> errorList = new ArrayList<>();
+        List<ImportPersonCertBo> successList = new ArrayList<>();
+        String importNo = ServletUtils.getEncoded("IMPORT");
+        for (ImportPersonCertBo itemImport : personCertList) {
+
+            if (Validator.isEmpty(itemImport.getPersonName())) {
+                itemImport.setCause("姓名不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+            if (Validator.isEmpty(itemImport.getIdCard())) {
+                itemImport.setCause("身份证不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+            if (Validator.isEmpty(itemImport.getExpiryDate())) {
+                itemImport.setCause("有效日期不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+            if (Validator.isEmpty(itemImport.getCompanyName())) {
+                itemImport.setCause("所属企业不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+
+            if (ObjectUtils.isEmpty(companyId)) {
+                String companmyName = itemImport.getCompanyName();
+                SysCompany company = sysCompanyService.selectCompanyByName(companmyName, userId);
+                if (company == null) {
+                    itemImport.setCause("公司名在数据表不存在,请添加客户后再导入");
+                    errorList.add(itemImport);
+                    continue;
+                }
+                companyId = company.getCompanyId();
+            }
+
+
+            SysPerson p = new SysPerson();
+            p.setPersonName(itemImport.getPersonName());
+            p.setIdCard(itemImport.getIdCard());
+            p.setStatus(1);
+            p.setCompanyId(companyId);
+            p.setCreator(userId);
+            p = sysPersonService.getPersonByIdCardAndNoInert(p);
+
+            if (Validator.isEmpty(itemImport.getCertificateTypeName())) {
+                itemImport.setCause("证书类型不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+
+            SysCertificateType sysCertType = certTypeSeaService.selectCertificateByName(itemImport.getCertificateTypeName());
+            if (sysCertType == null) {
+                itemImport.setCause("输入正确的证书类型名称");
+                errorList.add(itemImport);
+                continue;
+            }
+
+            SysCertificateType certType2 = certTypeSeaService.selectCertificateByName(itemImport.getCertificateTypeName2());
+            if (certType2 == null) {
+                itemImport.setCause("输入正确的证书名称");
+                errorList.add(itemImport);
+                continue;
+            }
+
+            long timestamp = 0;
+            try {
+                timestamp = (new SimpleDateFormat("yyyy/MM/dd").parse(itemImport.getExpiryDate())).getTime() / 1000;
+            } catch (ParseException e) {
+                itemImport.setCause("证书有效期格式不正确,格式应为:2026/1/1");
+                errorList.add(itemImport);
+                continue;
+            }
+            long issueDate = 0;
+            try {
+                issueDate = (new SimpleDateFormat("yyyy/MM/dd").parse(itemImport.getIssueDate())).getTime() / 1000;
+            } catch (ParseException e) {
+                itemImport.setCause("证书有效期格式不正确,格式应为:2026/1/1");
+                errorList.add(itemImport);
+                continue;
+            }
+            Integer majorId=0;
+
+
+            SysCertificate cert = new SysCertificate();
+            cert.setUserId(userId);
+            cert.setCertificateType(certType);
+            cert.setCertificateTypeId(sysCertType.getCertificateTypeId());
+            cert.setCertificateTypeId2(certType2.getCertificateTypeId());
+            cert.setCertificateTypeName(sysCertType.getCertificateTypeName());
+            cert.setCertificateTypeName2(certType2.getCertificateTypeName());
+            cert.setCertificateNumber(itemImport.getCertificateNumber());
+            cert.setIssuerName(itemImport.getIssuerName());
+            cert.setIssueDate(issueDate);
+            cert.setExpiryDate(timestamp);
+            cert.setPersonId(p.getPersonId());
+            cert.setCompanyId(companyId);
+            cert.setStatus(1);
+            cert.setCreateTime(DateUtils.getNowTime());
+            String majorName = null;
+            SysCertificate info = null;
+            if (cert.getCertificateType() == 2) {
+                info = getOne(new LambdaUpdateWrapper<SysCertificate>().eq(SysCertificate::getPersonId, cert.getPersonId())
+                        .eq(SysCertificate::getStatus, 1)
+                        .eq(SysCertificate::getCertificateTypeId2, cert.getCertificateTypeId2()));
+            } else {
+                info = getOne(new LambdaUpdateWrapper<SysCertificate>().eq(SysCertificate::getCompanyId, cert.getCompanyId())
+                        .eq(SysCertificate::getStatus, 1)
+                        .eq(SysCertificate::getCertificateTypeId2, cert.getCertificateTypeId2()));
+            }
+
+            if (info != null && info.getCertificateId() > 0 && cert.getCertificateType() != 2) {
+                itemImport.setCause("本证书已存在,无需重复导入");
+                errorList.add(itemImport);
+                continue;
+            }
+
+            if (sysCertType.getMajorType() == 1) {
+                if (Validator.isEmpty(itemImport.getMajorName())) {
+                    itemImport.setCause("本证书需要专业,专类不能为空");
+                    errorList.add(itemImport);
+                    continue;
+                }
+                CertificateMajor major = majorService.selectCertificateMajorByName(certType2.getCertificateTypeId(), itemImport.getMajorName());
+                if (major == null) {
+                    itemImport.setCause("证书专业名称找不到,请确认专业名称有效");
+                    errorList.add(itemImport);
+                    continue;
+                }
+
+                majorName = major.getMajorName();
+                cert.setMajorId(major.getMajorId());
+                majorId=major.getMajorId();
+            }
+            if (info == null) {
+                certMapper.insert(cert);
+            }else {
+                cert=info;
+            }
+
+
+            SysCertificateAddition pa = null;
+
+            pa = certAddMapper.selectOne(new LambdaUpdateWrapper<SysCertificateAddition>()
+                    .eq(SysCertificateAddition::getCertificateId, cert.getCertificateId())
+                    .eq(ObjectUtils.isNotNull(cert.getMajorId()), SysCertificateAddition::getMajorId, majorId)
+                    .eq(SysCertificateAddition::getStatus, 1));
+
+            if (pa != null && pa.getCertificateAdditionId() > 0) {
+                itemImport.setCause(majorName+"专业已存在无需重复添加");
+                errorList.add(itemImport);
+                continue;
+
+            }
+
+
+            SysCertificateAddition pa2 = certAddMapper.selectOne(new LambdaUpdateWrapper<SysCertificateAddition>()
+                    .eq(SysCertificateAddition::getCertificateId, cert.getCertificateId())
+                    .eq(SysCertificateAddition::getStatus, 1)
+                    .last("LIMIT 1"));
+
+            SysCertificateAddition model = new SysCertificateAddition();
+            model.setCertificateId(cert.getCertificateId());
+            model.setExpiryDate(timestamp);
+            model.setCreateTime(DateUtils.getNowTime());
+            model.setMajorId(majorId);
+            model.setCreator(cert.getUserId());
+            model.setStatus(1);
+            model.setMajorName(majorName);
+            model.setIsPrimary(0);
+            if (pa2 == null) {
+                model.setIsPrimary(1);
+            }
+
+            if (certAddMapper.insert(model) > 0) {
+                itemImport.setCause("导入成功");
+                successList.add(itemImport);
+                continue;
+            } else {
+                itemImport.setCause("导入失败");
+                errorList.add(itemImport);
+                continue;
+            }
+
+        }
+        Map<String, Object> resultMap = new HashMap<>();
+        resultMap.put("errorList", errorList);
+        resultMap.put("successList", successList);
+        resultMap.put("importNo", importNo);
+        return resultMap;
+    }
+
+    @Override
+    public Map<String, Object> importCompanyCert(List<ImportCompanyCertBo> certList, Long companyId, Long userId, Integer certType) {
+        if (CollectionUtils.isEmpty(certList)) {
+            throw new IllegalArgumentException("请勿导入空表格");
+        }
+        List<ImportCompanyCertBo> errorList = new ArrayList<>();
+        List<ImportCompanyCertBo> successList = new ArrayList<>();
+        String importNo = ServletUtils.getEncoded("IMPORT");
+        for (ImportCompanyCertBo itemImport : certList) {
+
+            if (Validator.isEmpty(itemImport.getCompanyName())) {
+                itemImport.setCause("企业名称不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+            if (Validator.isEmpty(itemImport.getLevelName())&&certType==3) {
+                itemImport.setCause("*资质等级不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+            if (Validator.isEmpty(itemImport.getExpiryDate())) {
+                itemImport.setCause("证书有效期不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+            if (Validator.isEmpty(itemImport.getCertificateNumber())) {
+                itemImport.setCause("证书编号不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+
+            SysCertificateType sysCertType =null;
+            if(certType==3) {
+                sysCertType = certTypeSeaService.selectCertificateByName(itemImport.getLevelName());
+                if (sysCertType == null) {
+                    itemImport.setCause("资质等级数据表中未找到相关信息,请确认等级名称正确");
+                    errorList.add(itemImport);
+                    continue;
+                }
+            }
+            Integer isPrimary = 0;
+            if(StringUtils.isNotBlank(itemImport.getIsPrimary()) &&itemImport.getIsPrimary().equals("是"))
+            {
+                isPrimary=1;
+            }
+
+            Long timestamp = 0l;
+            try {
+                timestamp = (new SimpleDateFormat("yyyy/MM/dd").parse(itemImport.getExpiryDate())).getTime() / 1000;
+            } catch (ParseException e) {
+                itemImport.setCause("证书有效期格式不正确,格式应为:2026/1/1");
+                errorList.add(itemImport);
+                continue;
+            }
+            long issueDate = 0;
+            if (!Validator.isEmpty(itemImport.getIssueDate())) {
+                try {
+                    issueDate = (new SimpleDateFormat("yyyy/MM/dd").parse(itemImport.getIssueDate())).getTime() / 1000;
+                } catch (ParseException e) {
+                    itemImport.setCause("证书有效期格式不正确,格式应为:2026/1/1");
+                    errorList.add(itemImport);
+                    continue;
+                }
+            }
+
+            if(ObjectUtils.isEmpty(companyId)||companyId<=0) {
+                String companyName = itemImport.getCompanyName();
+                SysCompany company = sysCompanyService.selectCompanyByName(companyName, userId);
+                if(company==null)
+                {
+                    itemImport.setCause("公司名在数据表不存在,请添加客户后再导入");
+                    errorList.add(itemImport);
+                    continue;
+                }
+                companyId=company.getCompanyId();
+            }
+
+
+            Integer certificateTypeId=1;
+            Integer certificateTypeId2=1;
+            String certificateTypeName="企业安全生产许可证书";
+            String certificateTypeName2="企业安全生产许可证书";
+            if(certType==3)
+            {
+                certificateTypeId=3;
+                certificateTypeId2=sysCertType.getCertificateTypeId();
+                certificateTypeName="企业资质";
+                certificateTypeName2=sysCertType.getCertificateTypeName();
+            }
+
+
+            SysCertificate cert = new SysCertificate();
+            cert.setUserId(userId);
+            cert.setCertificateType(certType);
+            cert.setCertificateTypeId(certificateTypeId);
+            cert.setCertificateTypeId2(certificateTypeId2);
+            cert.setCertificateTypeName(certificateTypeName);
+            cert.setCertificateTypeName2(certificateTypeName2);
+            cert.setCertificateNumber(itemImport.getCertificateNumber());
+            cert.setIssuerName(itemImport.getIssuerName());
+            if(timestamp>0) {
+                cert.setExpiryDate(timestamp);
+            }
+            if(issueDate>0) {
+                cert.setIssueDate(issueDate);
+            }
+            cert.setStatus(1);
+            cert.setCompanyId(companyId);
+            cert.setCreateTime(DateUtils.getNowTime());
+            cert.setIsPrimary(isPrimary);
+            SysCertificate info = null;
+            info = getOne(new LambdaUpdateWrapper<SysCertificate>().eq(SysCertificate::getCompanyId, cert.getCompanyId())
+                        .eq(SysCertificate::getStatus, 1)
+                        .eq(SysCertificate::getCertificateTypeId2, cert.getCertificateTypeId2()));
+
+
+            if (info != null && info.getCertificateId() > 0) {
+                itemImport.setCause("本证书已存在,无需重复导入");
+                errorList.add(itemImport);
+                continue;
+            }
+
+
+            certMapper.insert(cert);
+
+
+            SysCertificateAddition pa = null;
+
+            pa = certAddMapper.selectOne(new LambdaUpdateWrapper<SysCertificateAddition>()
+                    .eq(SysCertificateAddition::getCertificateId, cert.getCertificateId())
+                    .eq(ObjectUtils.isNotNull(cert.getMajorId()), SysCertificateAddition::getMajorId, cert.getMajorId())
+                    .eq(SysCertificateAddition::getStatus, 1));
+
+            if (pa != null && pa.getCertificateAdditionId() > 0) {
+                throw new CustomException("证书存在无需重复添加");
+            }
+
+
+            SysCertificateAddition pa2 = certAddMapper.selectOne(new LambdaUpdateWrapper<SysCertificateAddition>()
+                    .eq(SysCertificateAddition::getCertificateId, cert.getCertificateId())
+                    .eq(SysCertificateAddition::getStatus, 1));
+
+            SysCertificateAddition model = new SysCertificateAddition();
+            model.setCertificateId(cert.getCertificateId());
+            model.setExpiryDate(cert.getExpiryDate());
+            model.setCreateTime(DateUtils.getNowTime());
+            model.setMajorId(cert.getMajorId());
+            model.setCreator(cert.getUserId());
+            model.setIsPrimary(isPrimary);
+            model.setStatus(1);
+            if(certType==3) {
+                model.setIsPrimary(0);
+                if (pa2 == null) {
+                    model.setIsPrimary(1);
+                }
+            }
+
+            if (certAddMapper.insert(model) > 0) {
+                itemImport.setCause("导入成功");
+                successList.add(itemImport);
+                continue;
+            } else {
+                itemImport.setCause("导入失败");
+                errorList.add(itemImport);
+                continue;
+            }
+
+        }
+        Map<String, Object> resultMap = new HashMap<>();
+        resultMap.put("errorList", errorList);
+        resultMap.put("successList", successList);
+        resultMap.put("importNo", importNo);
+        return resultMap;
+    }
 }

+ 7 - 0
src/main/java/com/zhongzheng/service/impl/SysCertificateTypeServiceImpl.java

@@ -95,4 +95,11 @@ public class SysCertificateTypeServiceImpl extends ServiceImpl<SysCertificateTyp
     public SysCertificateType selectCertificateById(Integer id) {
         return  getById(id);
     }
+
+    @Override
+    public SysCertificateType selectCertificateByName(String typeName) {
+        return getOne(new LambdaUpdateWrapper<SysCertificateType>()
+                .eq(SysCertificateType::getCertificateTypeName, typeName)
+                .eq(SysCertificateType::getStatus, 1));
+    }
 }

+ 71 - 1
src/main/java/com/zhongzheng/service/impl/SysCompanyServiceImpl.java

@@ -4,8 +4,12 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.bo.ImportCompanyBo;
+import com.zhongzheng.bo.ImportPersonBo;
 import com.zhongzheng.common.filter.CustomException;
 import com.zhongzheng.common.model.TableDataInfo;
 import com.zhongzheng.common.util.DateUtils;
@@ -21,7 +25,10 @@ import com.zhongzheng.service.ISysCustomerSeaService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.ZoneId;
+import java.util.*;
 
 /**
  * 菜单 业务层处理
@@ -121,6 +128,69 @@ public class SysCompanyServiceImpl extends ServiceImpl<SysCompanyMapper, SysComp
         return list;
     }
 
+    @Override
+    public Map<String, Object> importCompany(List<ImportCompanyBo> companyList, long userId) {
+         if (CollectionUtils.isEmpty(companyList)) {
+            throw new IllegalArgumentException("请勿导入空表格");
+        }
+        List<ImportCompanyBo> errorList = new ArrayList<>();
+        List<ImportCompanyBo> successList = new ArrayList<>();
+        String importNo = ServletUtils.getEncoded("IMPORT");
+        for (ImportCompanyBo itemImport : companyList) {
+            SysCompany entity = new SysCompany();
+            entity.setCompanyName(itemImport.getCompanyName());
+            entity.setIndustry(itemImport.getIndustry());
+            entity.setCity(itemImport.getCity());
+            entity.setProvince(itemImport.getProvince());
+            entity.setContactPerson(itemImport.getContactPerson());
+            entity.setContactPhone(itemImport.getContactPhone());
+            entity.setCreateTime(DateUtils.getNowTime());
+            entity.setRegAddress(itemImport.getRegAddress());
+            entity.setCompanySize(itemImport.getCompanySize());
+            int companyType = 0;
+            if(StringUtils.isNotBlank(itemImport.getCompanyTypeName()) &&itemImport.getCompanyTypeName().equals("中小客户"))
+            {
+                companyType=0;
+            }else if(StringUtils.isNotBlank(itemImport.getCompanyTypeName()) &&itemImport.getCompanyTypeName().equals("大客户"))
+            {
+                companyType=1;
+            }
+            entity.setCompanyType(companyType);
+            entity.setStatus(1);
+            entity.setUserId(userId);
+
+            if (Validator.isEmpty(itemImport.getCompanyName())) {
+                itemImport.setCause("客户名称不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+
+            if (checkNameUnique(entity)) {
+                itemImport.setCause("企业名称重复");
+                errorList.add(itemImport);
+                continue;
+            }
+
+            if (insertCompany(entity) > 0) {
+                itemImport.setCause("导入成功");
+                successList.add(itemImport);
+                continue;
+            } else {
+                itemImport.setCause("导入失败");
+                errorList.add(itemImport);
+                continue;
+            }
+
+
+        }
+        Map<String, Object> resultMap = new HashMap<>();
+        resultMap.put("errorList", errorList);
+        resultMap.put("successList", successList);
+        resultMap.put("importNo", importNo);
+        return resultMap;
+
+    }
+
 
     private boolean checkNameUnique(SysCompany entity) {
         SysCompany info = getOne(new LambdaUpdateWrapper<SysCompany>().eq(SysCompany::getCompanyName,entity.getCompanyName()).eq(SysCompany::getStatus,1));

+ 119 - 3
src/main/java/com/zhongzheng/service/impl/SysPersonServiceImpl.java

@@ -5,14 +5,17 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.http.HttpStatus;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.bo.ImportPersonBo;
 import com.zhongzheng.common.filter.CustomException;
 import com.zhongzheng.common.model.TableDataInfo;
 import com.zhongzheng.common.util.DateUtils;
 import com.zhongzheng.common.util.EncryptHandler;
+import com.zhongzheng.common.util.ServletUtils;
 import com.zhongzheng.domian.SysCompany;
 import com.zhongzheng.domian.SysPerson;
 import com.zhongzheng.mapper.SysCustomerSeaMapper;
@@ -23,8 +26,13 @@ import com.zhongzheng.service.ISysPersonService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Collections;
-import java.util.List;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+import java.util.*;
 
 /**
  * 菜单 业务层处理
@@ -183,11 +191,109 @@ public class SysPersonServiceImpl extends ServiceImpl<SysPersonMapper, SysPerson
 
        if(model==null){
            insertPerson(entity);
+           return  entity;
+       }else {
+           return model;
        }
-       return model;
 
     }
 
+    @Override
+    public SysPerson getPersonByIdCardAndNoInert(SysPerson entity) {
+        SysPerson model=   getPersonByIdCard(entity);
+
+        if(model==null){
+            insertPerson(entity);
+            return  entity;
+        }else {
+            return model;
+        }
+    }
+
+    @Override
+    public Map<String, Object> importPerson(List<ImportPersonBo> personList, long companyId, long userId) {
+        if (CollectionUtils.isEmpty(personList)) {
+            throw new IllegalArgumentException("请勿导入空表格");
+        }
+        List<ImportPersonBo> errorList = new ArrayList<>();
+        List<ImportPersonBo> successList = new ArrayList<>();
+        String importNo = ServletUtils.getEncoded("IMPORT");
+        for (ImportPersonBo itemImport : personList) {
+            SysPerson entity = new SysPerson();
+            entity.setPersonName(itemImport.getPersonName());
+            entity.setPhone(itemImport.getPhone());
+            entity.setIdCard(itemImport.getIdCard());
+            entity.setEducation(itemImport.getEducation());
+            entity.setSchool(itemImport.getSchool());
+            entity.setGender(itemImport.getGender());
+            String format = itemImport.getGraduationTime();
+            ZoneId zoneId = ZoneId.systemDefault();
+            long timestamp=0;
+            if(StringUtils.isNotBlank(format)) {
+                try {
+                    timestamp = (new SimpleDateFormat(format).parse("yyyy/MM/dd")).getTime() / 1000;
+                } catch (ParseException e) {
+                    itemImport.setCause("毕业时间格式不正确");
+                    errorList.add(itemImport);
+                    continue;
+                }
+            }
+            if(timestamp>0) {
+                entity.setGraduationTime(timestamp);
+            }
+            entity.setCreateTime(DateUtils.getNowTime());
+            entity.setStatus(1);
+            entity.setUpdateTime(DateUtils.getNowTime());
+            entity.setCreator(userId);
+            entity.setCompanyId(companyId);
+            if (Validator.isEmpty(itemImport.getPhone()) || itemImport.getPhone().length() != 11) {
+                itemImport.setCause("手机号不能为空或者格式不对");
+                errorList.add(itemImport);
+                continue;
+            }
+            if (Validator.isEmpty(itemImport.getIdCard())) {
+                itemImport.setCause("身份证不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+            if (Validator.isEmpty(itemImport.getPersonName())) {
+                itemImport.setCause("真实姓名不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+
+            if (checkIdCardUnique(entity)) {
+
+                itemImport.setCause("身份证重复了");
+                errorList.add(itemImport);
+                continue;
+            }
+            if (checkPhoneUnique(entity)) {
+                itemImport.setCause("手机号重复了");
+                errorList.add(itemImport);
+                continue;
+            }
+            if (personMapper.insert(entity) > 0) {
+                itemImport.setCause("导入成功");
+                successList.add(itemImport);
+                continue;
+            } else {
+                itemImport.setCause("导入失败");
+                errorList.add(itemImport);
+                continue;
+            }
+
+
+        }
+        Map<String, Object> resultMap = new HashMap<>();
+        resultMap.put("errorList", errorList);
+        resultMap.put("successList", successList);
+        resultMap.put("importNo", importNo);
+        return resultMap;
+
+    }
+
+
     public  SysPerson getPersonByIdName(SysPerson model) {
 
         SysPerson p = getOne(new LambdaUpdateWrapper<SysPerson>().eq(SysPerson::getPersonName,model.getPersonName())
@@ -195,6 +301,15 @@ public class SysPersonServiceImpl extends ServiceImpl<SysPersonMapper, SysPerson
                 .eq(SysPerson::getStatus,1));
         return p;
     }
+    public  SysPerson getPersonByIdCard(SysPerson model) {
+
+        String idcard=EncryptHandler.encrypt(model.getIdCard());
+
+        SysPerson p = getOne(new LambdaUpdateWrapper<SysPerson>().eq(SysPerson::getIdCard,idcard)
+                .eq(SysPerson::getCompanyId,model.getCompanyId())
+                .eq(SysPerson::getStatus,1));
+        return p;
+    }
 
     public  void  checklegal(long personId,long userid)
     {
@@ -207,4 +322,5 @@ public class SysPersonServiceImpl extends ServiceImpl<SysPersonMapper, SysPerson
             throw new CustomException("非法操作");
         }
     }
+
 }

+ 168 - 2
src/main/resources/mapper/SysCertificateMapper.xml

@@ -19,7 +19,7 @@
             AND a.user_id =#{cet.userId}
         </if>
         <if test="cet.companyId != null and cet.companyId  != ''">
-            AND a.company_id =#{cet.companyType}
+            AND a.company_id =#{cet.companyId}
         </if>
         <if test="cet.personId != null and cet.personId != ''">
             AND a.person_id =#{cet.personId}
@@ -71,7 +71,7 @@
             AND a.user_id =#{cet.userId}
         </if>
         <if test="cet.companyId != null and cet.companyId  != ''">
-            AND a.company_id =#{cet.companyType}
+            AND a.company_id =#{cet.companyId}
         </if>
 
         <if test="cet.certificateType != null and cet.certificateType != ''">
@@ -104,4 +104,170 @@
 
     </select>
 
+    <select id="selectEnterpriseWarningCerList" parameterType="com.zhongzheng.bo.SysCertificateBo" resultType="com.zhongzheng.domian.SysCertificate">
+        select sc.company_name,a.certificate_type,c.certificate_type_name,c.certificate_type_Id,sc.company_id,max(b.warning_time) as warning_time,COUNT((1))  as warning_count
+        from sys_certificate a ,sys_certificate_addition b ,sys_certificate_type c ,sys_company sc where
+        a.certificate_id=b.certificate_id and a.company_id=sc.company_id
+        and (
+        ( a.certificate_type_id2=c.certificate_type_id  and a.certificate_type=2)
+        or ( a.certificate_type_id=c.certificate_type_id  and a.certificate_type in (1,3))
+        )
+        and b.warning_state=1
+
+        <if test="cet.userId != null and cet.userId  != ''">
+            AND a.user_id =#{cet.userId}
+        </if>
+        <if test="cet.companyId != null and cet.companyId  != ''">
+            AND sc.company_id =#{cet.companyId}
+        </if>
+
+        <if test="cet.certificateType != null and cet.certificateType != ''">
+            AND certificate_type =#{cet.certificateType}
+        </if>
+        <if test="cet.certificateTypeId != null and cet.certificateTypeId != ''">
+            AND a.certificate_type_id =#{cet.certificateTypeId}
+        </if>
+
+        <if test="cet.warningState != null and cet.warningState ==1">
+            AND b.warning_state >=#{cet.warningState}
+        </if>
+        <if test="cet.warningState != null and cet.warningState ==2">
+            AND (b.warning_state  is null or b.warning_state=0)
+        </if>
+
+        GROUP BY sc.company_name,a.company_id,a.certificate_type, c.certificate_type_name,c.certificate_type_Id,sc.company_id
+
+
+
+    </select>
+
+    <select id="selectCerAdditionList" parameterType="com.zhongzheng.bo.SysCertificateBo" resultType="com.zhongzheng.domian.SysCertificate">
+        select
+        a.certificate_id,
+        a.company_id,
+        a.certificate_type,
+        a.certificate_type_id,
+        a.certificate_type_id2,
+        a.certificate_number,
+        b.major_id,
+        b.expiry_date,
+        b.certificate_addition_id,
+        p.person_name,
+        p.id_card,
+        p.phone,
+        c.company_name,
+        ct.certificate_type_name
+        from sys_certificate a
+        inner JOIN sys_certificate_addition  b on   a.certificate_id = b.certificate_id
+        inner join sys_person p on p.person_id=a.person_id
+        inner join sys_company c on c.company_id=a.company_id
+        inner join sys_certificate_type  ct on ct.certificate_type_id=a.certificate_type_id2
+        where  a.Status=1
+        <if test="cet.userId != null and cet.userId  != ''">
+            AND a.user_id =#{cet.userId}
+        </if>
+        <if test="cet.companyId != null and cet.companyId  != ''">
+            AND a.company_id =#{cet.companyId}
+        </if>
+        <if test="cet.personId != null and cet.personId != ''">
+            AND a.person_id =#{cet.personId}
+        </if>
+        <if test="cet.certificateType != null and cet.certificateType != ''">
+            AND a.certificate_type =#{cet.certificateType}
+        </if>
+        <if test="cet.certificateTypeId != null and cet.certificateTypeId != ''">
+            AND a.certificate_type_Id =#{cet.certificateTypeId}
+        </if>
+        <if test="cet.certificateTypeId2 != null and cet.certificateTypeId2 != ''">
+            AND a.certificate_type_Id2 =#{cet.certificateTypeId2}
+        </if>
+        <if test="cet.beginTime != null and cet.beginTime != ''">
+            AND b.expiry_date >=#{cet.beginTime}
+        </if>
+
+        <if test="cet.endTime != null and cet.endTime != null">
+            <![CDATA[ AND b.expiry_date <= #{cet.endTime} ]]>
+        </if>
+
+        <if test="cet.warningState != null and cet.warningState ==1">
+            AND b.warning_state =#{cet.warningState}
+        </if>
+        <if test="cet.warningState != null and cet.warningState ==2">
+            AND (b.warning_state  is null or b.warning_state=0)
+        </if>
+
+        <if test="cet.personIds != null and cet.personIds.size()>0">
+            AND a.company_id in
+            <foreach item="id" collection="cet.personIds" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+
+        </if>
+
+
+    </select>
+    <select id="selectEnterpriseCerAdditionList" parameterType="com.zhongzheng.bo.SysCertificateBo" resultType="com.zhongzheng.domian.SysCertificate">
+        select
+        a.certificate_id,
+        a.company_id,
+        a.certificate_type,
+        a.certificate_type_id,
+        a.certificate_type_id2,
+        a.certificate_number,
+        b.major_id,
+        b.expiry_date,
+        b.certificate_addition_id,
+        c.company_name,
+        ct.certificate_type_name
+        from sys_certificate a
+        inner JOIN  sys_certificate_addition  b on   a.certificate_id = b.certificate_id
+        inner join  sys_company c on c.company_id=a.company_id
+        inner join sys_certificate_type  ct on ct.certificate_type_id=a.certificate_type_id
+
+        where  a.Status=1
+        <if test="cet.userId != null and cet.userId  != ''">
+            AND a.user_id =#{cet.userId}
+        </if>
+        <if test="cet.companyId != null and cet.companyId  != ''">
+            AND a.company_id =#{cet.companyId}
+        </if>
+        <if test="cet.certificateType != null and cet.certificateType != ''">
+            AND a.certificate_type =#{cet.certificateType}
+        </if>
+        <if test="cet.certificateTypeId != null and cet.certificateTypeId != ''">
+            AND a.certificate_type_Id =#{cet.certificateTypeId}
+        </if>
+        <if test="cet.certificateTypeId2 != null and cet.certificateTypeId2 != ''">
+            AND a.certificate_type_Id2 =#{cet.certificateTypeId2}
+        </if>
+        <if test="cet.beginTime != null and cet.beginTime != ''">
+            AND b.expiry_date >=#{cet.beginTime}
+        </if>
+
+        <if test="cet.endTime != null and cet.endTime != null">
+            <![CDATA[ AND b.expiry_date <= #{cet.endTime} ]]>
+        </if>
+
+        <if test="cet.warningState != null and cet.warningState ==1">
+            AND b.warning_state =#{cet.warningState}
+        </if>
+        <if test="cet.warningState != null and cet.warningState ==2">
+            AND (b.warning_state  is null or b.warning_state=0)
+        </if>
+
+        <if test="cet.personIds != null and cet.personIds.size()>0">
+            AND a.company_id in
+            <foreach item="id" collection="cet.personIds" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+
+        </if>
+
+
+    </select>
+
+
+
+
+
 </mapper>

Некоторые файлы не были показаны из-за большого количества измененных файлов