commit a019d38c4586aa6aa2b4340de4d3e30109146d21 Author: 1449109960@qq.com Date: Tue Jul 26 09:22:59 2022 +0800 微信推送 diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..d340ca1 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..c1dd12f Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..b74bf7f --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar diff --git a/logs/debug.log b/logs/debug.log new file mode 100644 index 0000000..e69de29 diff --git a/logs/error.log b/logs/error.log new file mode 100644 index 0000000..712d0fe --- /dev/null +++ b/logs/error.log @@ -0,0 +1,535 @@ +[15:02:41.242][org.apache.juli.logging.DirectJDKLog - log - 175] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.ExceptionInInitializerError] with root cause +java.lang.IllegalArgumentException: Directory couldn't be created: /wx-push-cache/wx-push-cache-data + at org.ehcache.impl.persistence.FileUtils.createLocationIfRequiredAndVerify(FileUtils.java:63) + at org.ehcache.impl.persistence.DefaultLocalPersistenceService.internalStart(DefaultLocalPersistenceService.java:85) + at org.ehcache.impl.persistence.DefaultLocalPersistenceService.start(DefaultLocalPersistenceService.java:75) + at org.ehcache.core.spi.ServiceLocator.startAllServices(ServiceLocator.java:128) + at org.ehcache.core.EhcacheManager.init(EhcacheManager.java:577) + at com.ynxbd.push.config.EhCacheConfig.initCacheManager(EhCacheConfig.java:45) + at com.ynxbd.push.config.EhCacheConfig.(EhCacheConfig.java:36) + at WxCacheRequest.createAccessTokenCache(WxCacheHelper.java:27) + at WxCacheRequest.(WxCacheHelper.java:16) + at com.ynxbd.push.httpRequest.tencent.WeChatDataRequest.getTemplateList(HttpWeChatDataHelper.java:38) + at com.ynxbd.push.httpRequest.tencent.WeChatDataRequest.getTemplateId(HttpWeChatDataHelper.java:43) + at com.ynxbd.push.controller.SendMessageController.templateMessageSend(SendMessageController.java:93) + 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:879) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) + 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:660) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) + 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 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.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 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) + 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:748) +[15:08:40.062][WxCacheRequest - getWxAccessToken - 64] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:08:40.686][org.apache.juli.logging.DirectJDKLog - log - 175] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause +java.lang.NullPointerException: null + at com.ynxbd.push.httpRequest.tencent.WeChatDataRequest.getTemplateId(HttpWeChatDataHelper.java:43) + at com.ynxbd.push.controller.SendMessageController.templateMessageSend(SendMessageController.java:93) + 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:879) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) + 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:660) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) + 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 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.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 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) + 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:748) +[15:40:37.894][WxCacheRequest - getWxAccessToken - 67] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:40:37.896][WxCacheRequest - getWxAccessToken - 72] 重试请求第1次 +[15:40:38.471][org.apache.juli.logging.DirectJDKLog - log - 175] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause +java.lang.NullPointerException: null + at com.ynxbd.push.httpRequest.tencent.WeChatDataRequest.getTemplateId(HttpWeChatDataHelper.java:43) + at com.ynxbd.push.controller.SendMessageController.templateMessageSend(SendMessageController.java:91) + 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:879) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) + 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:660) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) + 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 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.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 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) + 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:748) +[15:44:09.611][WxCacheRequest - getWxAccessToken - 67] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:44:09.611][WxCacheRequest - getWxAccessToken - 72] 重试请求第1次 +[15:44:09.617][WxCacheRequest - getWxAccessToken - 67] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:44:09.617][WxCacheRequest - getWxAccessToken - 72] 重试请求第2次 +[15:44:09.622][WxCacheRequest - getWxAccessToken - 67] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:44:09.623][WxCacheRequest - getWxAccessToken - 72] 重试请求第3次 +[15:44:09.628][WxCacheRequest - getWxAccessToken - 67] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:44:09.628][WxCacheRequest - getWxAccessToken - 69] 多次请求后未获取到正确token,抛出异常 +[15:44:10.214][org.apache.juli.logging.DirectJDKLog - log - 175] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause +java.lang.NullPointerException: null + at com.ynxbd.push.httpRequest.tencent.WeChatDataRequest.getTemplateId(HttpWeChatDataHelper.java:43) + at com.ynxbd.push.controller.SendMessageController.templateMessageSend(SendMessageController.java:91) + 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:879) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) + 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:660) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) + 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 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.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 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) + 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:748) +[15:44:35.211][WxCacheRequest - getWxAccessToken - 67] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:44:35.211][WxCacheRequest - getWxAccessToken - 69] 多次请求后未获取到正确token,抛出异常 +[15:44:35.293][org.apache.juli.logging.DirectJDKLog - log - 175] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause +java.lang.NullPointerException: null + at com.ynxbd.push.httpRequest.tencent.WeChatDataRequest.getTemplateId(HttpWeChatDataHelper.java:43) + at com.ynxbd.push.controller.SendMessageController.templateMessageSend(SendMessageController.java:91) + 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:879) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) + 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:660) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) + 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 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.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 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) + 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:748) +[15:45:26.287][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:45:26.289][WxCacheRequest - getWxAccessToken - 73] 重试请求第1次 +[15:45:26.294][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:45:26.294][WxCacheRequest - getWxAccessToken - 73] 重试请求第2次 +[15:45:26.297][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:45:26.297][WxCacheRequest - getWxAccessToken - 73] 重试请求第3次 +[15:45:26.301][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:45:26.301][WxCacheRequest - getWxAccessToken - 70] 多次请求后未获取到正确token,抛出异常 +[15:45:26.911][org.apache.juli.logging.DirectJDKLog - log - 175] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause +java.lang.NullPointerException: null + at com.ynxbd.push.httpRequest.tencent.WeChatDataRequest.getTemplateId(HttpWeChatDataHelper.java:43) + at com.ynxbd.push.controller.SendMessageController.templateMessageSend(SendMessageController.java:91) + 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:879) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) + 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:660) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) + 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 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.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 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) + 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:748) +[15:45:40.269][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:45:40.271][WxCacheRequest - getWxAccessToken - 70] 多次请求后未获取到正确token,抛出异常 +[15:45:40.520][org.apache.juli.logging.DirectJDKLog - log - 175] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause +java.lang.NullPointerException: null + at com.ynxbd.push.httpRequest.tencent.WeChatDataRequest.getTemplateId(HttpWeChatDataHelper.java:43) + at com.ynxbd.push.controller.SendMessageController.templateMessageSend(SendMessageController.java:91) + 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:879) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) + 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:660) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) + 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 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.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 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) + 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:748) +[15:47:11.309][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:47:11.310][WxCacheRequest - getWxAccessToken - 73] 重试请求第1次 +[15:47:11.314][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:47:11.314][WxCacheRequest - getWxAccessToken - 73] 重试请求第2次 +[15:47:11.316][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:47:11.316][WxCacheRequest - getWxAccessToken - 73] 重试请求第3次 +[15:47:11.319][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:47:11.319][WxCacheRequest - getWxAccessToken - 70] 多次请求后未获取到正确token,抛出异常 +[15:47:11.916][org.apache.juli.logging.DirectJDKLog - log - 175] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause +java.lang.NullPointerException: null + at com.ynxbd.push.httpRequest.tencent.WeChatDataRequest.getTemplateId(HttpWeChatDataHelper.java:43) + at com.ynxbd.push.controller.SendMessageController.templateMessageSend(SendMessageController.java:91) + 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:879) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) + 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:660) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) + 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 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.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 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) + 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:748) +[15:47:21.788][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:47:21.788][WxCacheRequest - getWxAccessToken - 73] 重试请求第1次 +[15:47:21.799][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:47:21.799][WxCacheRequest - getWxAccessToken - 73] 重试请求第2次 +[15:47:21.810][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:47:21.811][WxCacheRequest - getWxAccessToken - 73] 重试请求第3次 +[15:47:21.817][WxCacheRequest - getWxAccessToken - 68] 请求微信获取Token错误:I/O error on GET request for "http://127.0.0.1:8080/wx/api/getWxAccessToken.do": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) +[15:47:21.818][WxCacheRequest - getWxAccessToken - 70] 多次请求后未获取到正确token,抛出异常 +[15:47:21.890][org.apache.juli.logging.DirectJDKLog - log - 175] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause +java.lang.NullPointerException: null + at com.ynxbd.push.httpRequest.tencent.WeChatDataRequest.getTemplateId(HttpWeChatDataHelper.java:43) + at com.ynxbd.push.controller.SendMessageController.templateMessageSend(SendMessageController.java:91) + 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:879) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) + 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:660) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) + 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 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.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 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) + 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:748) diff --git a/logs/info.log b/logs/info.log new file mode 100644 index 0000000..7808214 --- /dev/null +++ b/logs/info.log @@ -0,0 +1,357 @@ +[15:02:22.612][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplication on absorber.local with PID 63184 (/Users/absorber/Downloads/wx-push/target/classes started by absorber in /Users/absorber/Downloads/wx-push) +[15:02:22.614][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default +[15:02:23.864][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing ProtocolHandler ["http-nio-8123"] +[15:02:23.865][org.apache.juli.logging.DirectJDKLog - log - 173] Starting service [Tomcat] +[15:02:23.866][org.apache.juli.logging.DirectJDKLog - log - 173] Starting Servlet engine: [Apache Tomcat/9.0.36] +[15:02:23.922][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring embedded WebApplicationContext +[15:02:24.007][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor +[15:02:24.008][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: restartedMain +[15:02:24.013][org.quartz.core.SchedulerSignalerImpl - - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +[15:02:24.014][org.quartz.core.QuartzScheduler - - 229] Quartz Scheduler v.2.3.2 created. +[15:02:24.014][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized. +[15:02:24.015][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +[15:02:24.015][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' +[15:02:24.015][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2 +[15:02:24.317][org.apache.juli.logging.DirectJDKLog - log - 173] Starting ProtocolHandler ["http-nio-8123"] +[15:02:24.347][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] []Starting Quartz task ... +[15:02:24.352][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. +[15:02:24.355][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplication in 2.14 seconds (JVM running for 3.266) +[15:02:40.528][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring DispatcherServlet 'dispatcherServlet' +[15:08:32.735][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplication on absorber.local with PID 63271 (/Users/absorber/Downloads/wx-push/target/classes started by absorber in /Users/absorber/Downloads/wx-push) +[15:08:32.740][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default +[15:08:33.872][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing ProtocolHandler ["http-nio-8123"] +[15:08:33.874][org.apache.juli.logging.DirectJDKLog - log - 173] Starting service [Tomcat] +[15:08:33.874][org.apache.juli.logging.DirectJDKLog - log - 173] Starting Servlet engine: [Apache Tomcat/9.0.36] +[15:08:33.926][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring embedded WebApplicationContext +[15:08:34.016][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor +[15:08:34.017][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: restartedMain +[15:08:34.022][org.quartz.core.SchedulerSignalerImpl - - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +[15:08:34.022][org.quartz.core.QuartzScheduler - - 229] Quartz Scheduler v.2.3.2 created. +[15:08:34.023][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized. +[15:08:34.023][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +[15:08:34.023][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' +[15:08:34.024][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2 +[15:08:34.314][org.apache.juli.logging.DirectJDKLog - log - 173] Starting ProtocolHandler ["http-nio-8123"] +[15:08:34.344][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] []Starting Quartz task ... +[15:08:34.349][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. +[15:08:34.353][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplication in 1.996 seconds (JVM running for 2.798) +[15:08:39.179][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring DispatcherServlet 'dispatcherServlet' +[15:08:40.018][com.ynxbd.push.config.IniConfig - - 31] IP:10.37.129.2 +[15:08:40.021][WxCacheRequest - getWxAccessToken - 56] 启动医院为:(本地)蒙自市第一人民医院 +[15:08:40.318][weixin.popular.client.LocalHttpClient - loggerRequest - 257] URI[d11da03d-1506-4d59-9dc6-c3f796cde111] https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token&lang=zh_CN +[15:08:40.634][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[d11da03d-1506-4d59-9dc6-c3f796cde111] elapsed time:317 ms RESPONSE DATA:{"errcode":41001,"errmsg":"access_token missing rid: 62d8fb78-2dfd219b-19bc134f"} +[15:09:34.927][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplication on absorber.local with PID 63302 (/Users/absorber/Downloads/wx-push/target/classes started by absorber in /Users/absorber/Downloads/wx-push) +[15:09:34.930][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default +[15:09:35.929][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing ProtocolHandler ["http-nio-8123"] +[15:09:35.931][org.apache.juli.logging.DirectJDKLog - log - 173] Starting service [Tomcat] +[15:09:35.931][org.apache.juli.logging.DirectJDKLog - log - 173] Starting Servlet engine: [Apache Tomcat/9.0.36] +[15:09:35.981][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring embedded WebApplicationContext +[15:09:36.067][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor +[15:09:36.068][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: restartedMain +[15:09:36.073][org.quartz.core.SchedulerSignalerImpl - - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +[15:09:36.073][org.quartz.core.QuartzScheduler - - 229] Quartz Scheduler v.2.3.2 created. +[15:09:36.075][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized. +[15:09:36.076][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +[15:09:36.076][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' +[15:09:36.077][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2 +[15:09:36.437][org.apache.juli.logging.DirectJDKLog - log - 173] Starting ProtocolHandler ["http-nio-8123"] +[15:09:36.465][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] []Starting Quartz task ... +[15:09:36.471][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. +[15:09:36.477][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplication in 1.878 seconds (JVM running for 2.506) +[15:09:43.918][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring DispatcherServlet 'dispatcherServlet' +[15:09:44.768][com.ynxbd.push.config.IniConfig - - 31] IP:10.37.129.2 +[15:09:44.770][WxCacheRequest - getWxAccessToken - 56] 启动医院为:(本地)蒙自市第一人民医院 +[15:09:56.545][WxCacheRequest - getWxAccessToken - 58] access_code:200 +[15:09:56.550][WxCacheRequest - getWxAccessToken - 60] access_token:59_vfTkhTVx3IQDup-W54HuGwW89_6rbcXQUAvgHxJ5UaT2e6FL33gj-BghbAhx3sg2bCBa2uBdw-5qxj3JxIiPDMKQp0QLJh32xfUmMydQntM0Ry2Ri_lOWWhz6ZdFLWv3EkZ-bV0CSR1uLO2DRBWaAGAHRM +[15:09:56.789][weixin.popular.client.LocalHttpClient - loggerRequest - 257] URI[a6bad539-9b7f-448d-bc1d-96b9c4a1c7b8] https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=59_vfTkhTVx3IQDup-W54HuGwW89_6rbcXQUAvgHxJ5UaT2e6FL33gj-BghbAhx3sg2bCBa2uBdw-5qxj3JxIiPDMKQp0QLJh32xfUmMydQntM0Ry2Ri_lOWWhz6ZdFLWv3EkZ-bV0CSR1uLO2DRBWaAGAHRM&lang=zh_CN +[15:09:57.310][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[a6bad539-9b7f-448d-bc1d-96b9c4a1c7b8] elapsed time:521 ms RESPONSE DATA:{"template_list":[{"template_id":"gEe0a8JwbNw_rII5nzM9b5ipsqu7eoMzUM4oU4ndcoI","title":"订阅模板消息","primary_industry":"","deputy_industry":"","content":"{{content.DATA}}","example":""},{"template_id":"Rt30w4zFMuKe62wpEfELZkC42qjVVs1j9nOm2pnuPWk","title":"信息完善提醒","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n信息类型:{{keyword1.DATA}}\n医院:{{keyword2.DATA}}\n{{remark.DATA}}","example":"您好,为了更好跟踪您的病情,请完善您的个人信息\r\n信息类型:生活习惯\r\n医院:广东省中医院\r\n点击完善个人信息。"},{"template_id":"CkUk68zgI2nU2eHHQ6K-6RuJDbDQbf_xw6EVyfpYiKs","title":"排队叫号提醒","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n科室:{{keyword1.DATA}}\n医生:{{keyword2.DATA}}\n当前叫号:{{keyword3.DATA}}\n本人号码:{{keyword4.DATA}}\n需等待人数:{{keyword5.DATA}}\n{{remark.DATA}}","example":"您已进入候诊队列,请及时查看。\r\n科室:内科\r\n医生:张医生\r\n当前叫号:001\r\n本人号码:009\r\n需等待人数:8\r\n请合理安排好时间及时就诊,以免过号。"},{"template_id":"tbHXha5siTC1Fs0vCXQoHB0zlKmgtOp2Ihf_CzH2d4o","title":"健康卡成功升级通知","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n升级时间:{{keyword1.DATA}}\n升级说明:{{keyword2.DATA}}\n{{remark.DATA}}","example":"您已成功将就诊卡升级为健康卡!\r\n升级时间:2014年7月21日 18:36\r\n升级说明:健康卡可完全替代就诊卡,支持区域内多家医院跨院就医,无需重复办卡,实现线上挂号缴费,线下扫码就医。\r\n点击查看健康卡"},{"template_id":"yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI","title":"绑定通知","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n内容:{{keyword1.DATA}}\n时间:{{keyword2.DATA}}\n{{remark.DATA}}","example":"刘先生,你好:\r\n内容:某某医生提醒您尽快绑定xx账号,以便沟通\r\n时间:2015年9月29日 12:36\r\n点击详情查看更多"}]} +[15:09:57.338][com.ynxbd.push.controller.SendMessageController - templateMessageSend - 95] template_id:yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI +[15:09:57.338][com.ynxbd.push.controller.SendMessageController - templateMessageSend - 96] code:0 +[15:09:57.339][com.ynxbd.push.controller.SendMessageController - templateMessageSend - 97] open_id:34AA9283E73A1796A8A89DCB5D6CCA721024D2B37F85D3740B2B51C650D4D610 +[15:09:57.385][com.ynxbd.push.helper.MessageApiHelper - templateMessage - 76] SendTenCentJson:{"data":{"keyword5":{"color":"#173177","value":null},"keyword3":{"color":"#173177","value":null},"keyword4":{"color":"#173177","value":null},"keyword1":{"color":"#173177","value":"测试"},"keyword2":{"color":"#173177","value":"测试"},"remark":{"color":"#173177","value":"测试"},"first":{"color":"#173177","value":"测试"}},"template_id":"yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI","touser":"oX5GuwV9DOhctadDV3OD7vkWQpGE","url":null,"miniprogram":{"pagepath":null,"appid":null},"title":null,"scene":null} +[15:09:57.395][weixin.popular.client.LocalHttpClient - loggerRequest - 250] URI[717d9c1b-8bd2-49e1-b2a9-23b600bd64b9] https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=59_vfTkhTVx3IQDup-W54HuGwW89_6rbcXQUAvgHxJ5UaT2e6FL33gj-BghbAhx3sg2bCBa2uBdw-5qxj3JxIiPDMKQp0QLJh32xfUmMydQntM0Ry2Ri_lOWWhz6ZdFLWv3EkZ-bV0CSR1uLO2DRBWaAGAHRM Content-Type: text/plain; charset=UTF-8 ContentLength:511 Content:{"data":{"keyword5":{"color":"#173177","value":null},"keyword3":{"color":"#173177","value":null},"keyword4":{"color":"#173177","value":null},"keyword1":{"color":"#173177","value":"测试"},"keyword2":{"color":"#173177","value":"测试"},"remark":{"color":"#173177","value":"测试"},"first":{"color":"#173177","value":"测试"}},"template_id":"yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI","touser":"oX5GuwV9DOhctadDV3OD7vkWQpGE","url":null,"miniprogram":{"pagepath":null,"appid":null},"title":null,"scene":null} +[15:09:57.836][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[717d9c1b-8bd2-49e1-b2a9-23b600bd64b9] elapsed time:441 ms RESPONSE DATA:{"errcode":0,"errmsg":"ok","msgid":2496367981904855042} +[15:09:57.844][com.ynxbd.push.helper.MessageApiHelper - templateMessageSend - 63] TenCent Return Message0 +[15:10:12.388][weixin.popular.client.LocalHttpClient - loggerRequest - 257] URI[0faadec5-3023-401b-b7e8-1b36890dfdba] https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=59_vfTkhTVx3IQDup-W54HuGwW89_6rbcXQUAvgHxJ5UaT2e6FL33gj-BghbAhx3sg2bCBa2uBdw-5qxj3JxIiPDMKQp0QLJh32xfUmMydQntM0Ry2Ri_lOWWhz6ZdFLWv3EkZ-bV0CSR1uLO2DRBWaAGAHRM&lang=zh_CN +[15:10:12.662][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[0faadec5-3023-401b-b7e8-1b36890dfdba] elapsed time:275 ms RESPONSE DATA:{"template_list":[{"template_id":"gEe0a8JwbNw_rII5nzM9b5ipsqu7eoMzUM4oU4ndcoI","title":"订阅模板消息","primary_industry":"","deputy_industry":"","content":"{{content.DATA}}","example":""},{"template_id":"Rt30w4zFMuKe62wpEfELZkC42qjVVs1j9nOm2pnuPWk","title":"信息完善提醒","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n信息类型:{{keyword1.DATA}}\n医院:{{keyword2.DATA}}\n{{remark.DATA}}","example":"您好,为了更好跟踪您的病情,请完善您的个人信息\r\n信息类型:生活习惯\r\n医院:广东省中医院\r\n点击完善个人信息。"},{"template_id":"CkUk68zgI2nU2eHHQ6K-6RuJDbDQbf_xw6EVyfpYiKs","title":"排队叫号提醒","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n科室:{{keyword1.DATA}}\n医生:{{keyword2.DATA}}\n当前叫号:{{keyword3.DATA}}\n本人号码:{{keyword4.DATA}}\n需等待人数:{{keyword5.DATA}}\n{{remark.DATA}}","example":"您已进入候诊队列,请及时查看。\r\n科室:内科\r\n医生:张医生\r\n当前叫号:001\r\n本人号码:009\r\n需等待人数:8\r\n请合理安排好时间及时就诊,以免过号。"},{"template_id":"tbHXha5siTC1Fs0vCXQoHB0zlKmgtOp2Ihf_CzH2d4o","title":"健康卡成功升级通知","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n升级时间:{{keyword1.DATA}}\n升级说明:{{keyword2.DATA}}\n{{remark.DATA}}","example":"您已成功将就诊卡升级为健康卡!\r\n升级时间:2014年7月21日 18:36\r\n升级说明:健康卡可完全替代就诊卡,支持区域内多家医院跨院就医,无需重复办卡,实现线上挂号缴费,线下扫码就医。\r\n点击查看健康卡"},{"template_id":"yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI","title":"绑定通知","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n内容:{{keyword1.DATA}}\n时间:{{keyword2.DATA}}\n{{remark.DATA}}","example":"刘先生,你好:\r\n内容:某某医生提醒您尽快绑定xx账号,以便沟通\r\n时间:2015年9月29日 12:36\r\n点击详情查看更多"}]} +[15:10:12.667][com.ynxbd.push.controller.SendMessageController - templateMessageSend - 95] template_id:yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI +[15:10:12.668][com.ynxbd.push.controller.SendMessageController - templateMessageSend - 96] code:0 +[15:10:12.668][com.ynxbd.push.controller.SendMessageController - templateMessageSend - 97] open_id:34AA9283E73A1796A8A89DCB5D6CCA721024D2B37F85D3740B2B51C650D4D610 +[15:10:12.700][com.ynxbd.push.helper.MessageApiHelper - templateMessage - 76] SendTenCentJson:{"data":{"keyword5":{"color":"#173177","value":null},"keyword3":{"color":"#173177","value":null},"keyword4":{"color":"#173177","value":null},"keyword1":{"color":"#173177","value":"测试"},"keyword2":{"color":"#173177","value":"测试"},"remark":{"color":"#173177","value":"测试"},"first":{"color":"#173177","value":"测试"}},"template_id":"yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI","touser":"oX5GuwV9DOhctadDV3OD7vkWQpGE","url":null,"miniprogram":{"pagepath":null,"appid":null},"title":null,"scene":null} +[15:10:12.704][weixin.popular.client.LocalHttpClient - loggerRequest - 250] URI[d2b8823e-f222-4303-b5d3-cf9837fb624f] https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=59_vfTkhTVx3IQDup-W54HuGwW89_6rbcXQUAvgHxJ5UaT2e6FL33gj-BghbAhx3sg2bCBa2uBdw-5qxj3JxIiPDMKQp0QLJh32xfUmMydQntM0Ry2Ri_lOWWhz6ZdFLWv3EkZ-bV0CSR1uLO2DRBWaAGAHRM Content-Type: text/plain; charset=UTF-8 ContentLength:511 Content:{"data":{"keyword5":{"color":"#173177","value":null},"keyword3":{"color":"#173177","value":null},"keyword4":{"color":"#173177","value":null},"keyword1":{"color":"#173177","value":"测试"},"keyword2":{"color":"#173177","value":"测试"},"remark":{"color":"#173177","value":"测试"},"first":{"color":"#173177","value":"测试"}},"template_id":"yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI","touser":"oX5GuwV9DOhctadDV3OD7vkWQpGE","url":null,"miniprogram":{"pagepath":null,"appid":null},"title":null,"scene":null} +[15:10:13.078][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[d2b8823e-f222-4303-b5d3-cf9837fb624f] elapsed time:375 ms RESPONSE DATA:{"errcode":0,"errmsg":"ok","msgid":2496368237858062338} +[15:10:13.080][com.ynxbd.push.helper.MessageApiHelper - templateMessageSend - 63] TenCent Return Message0 +[15:28:38.359][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplication on absorber.local with PID 63607 (/Users/absorber/Downloads/wx-push/target/classes started by absorber in /Users/absorber/Downloads/wx-push) +[15:28:38.364][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default +[15:28:39.531][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing ProtocolHandler ["http-nio-8123"] +[15:28:39.532][org.apache.juli.logging.DirectJDKLog - log - 173] Starting service [Tomcat] +[15:28:39.532][org.apache.juli.logging.DirectJDKLog - log - 173] Starting Servlet engine: [Apache Tomcat/9.0.36] +[15:28:39.597][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring embedded WebApplicationContext +[15:28:39.696][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor +[15:28:39.697][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: restartedMain +[15:28:39.702][org.quartz.core.SchedulerSignalerImpl - - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +[15:28:39.702][org.quartz.core.QuartzScheduler - - 229] Quartz Scheduler v.2.3.2 created. +[15:28:39.702][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized. +[15:28:39.703][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +[15:28:39.703][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' +[15:28:39.703][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2 +[15:28:39.991][org.apache.juli.logging.DirectJDKLog - log - 173] Starting ProtocolHandler ["http-nio-8123"] +[15:28:40.019][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] []Starting Quartz task ... +[15:28:40.025][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. +[15:28:40.029][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplication in 2.105 seconds (JVM running for 3.01) +[15:40:30.532][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplication on absorber.local with PID 63752 (/Users/absorber/Downloads/wx-push/target/classes started by absorber in /Users/absorber/Downloads/wx-push) +[15:40:30.537][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default +[15:40:31.739][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing ProtocolHandler ["http-nio-8123"] +[15:40:31.741][org.apache.juli.logging.DirectJDKLog - log - 173] Starting service [Tomcat] +[15:40:31.741][org.apache.juli.logging.DirectJDKLog - log - 173] Starting Servlet engine: [Apache Tomcat/9.0.36] +[15:40:31.803][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring embedded WebApplicationContext +[15:40:31.889][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor +[15:40:31.890][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: restartedMain +[15:40:31.895][org.quartz.core.SchedulerSignalerImpl - - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +[15:40:31.895][org.quartz.core.QuartzScheduler - - 229] Quartz Scheduler v.2.3.2 created. +[15:40:31.895][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized. +[15:40:31.896][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +[15:40:31.896][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' +[15:40:31.896][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2 +[15:40:32.189][org.apache.juli.logging.DirectJDKLog - log - 173] Starting ProtocolHandler ["http-nio-8123"] +[15:40:32.218][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] []Starting Quartz task ... +[15:40:32.224][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. +[15:40:32.228][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplication in 2.079 seconds (JVM running for 2.925) +[15:40:36.941][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring DispatcherServlet 'dispatcherServlet' +[15:40:37.851][com.ynxbd.push.config.IniConfig - - 31] IP:10.37.129.2 +[15:40:37.854][WxCacheRequest - getWxAccessToken - 58] 启动医院为:(本地)蒙自市第一人民医院 +[15:40:38.139][weixin.popular.client.LocalHttpClient - loggerRequest - 257] URI[b143d739-1695-497f-adac-f549c33a1637] https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token&lang=zh_CN +[15:40:38.419][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[b143d739-1695-497f-adac-f549c33a1637] elapsed time:282 ms RESPONSE DATA:{"errcode":41001,"errmsg":"access_token missing rid: 62d902f6-2f03e732-2cd63ec1"} +[15:43:59.781][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplication on absorber.local with PID 63812 (/Users/absorber/Downloads/wx-push/target/classes started by absorber in /Users/absorber/Downloads/wx-push) +[15:43:59.784][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default +[15:44:00.875][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing ProtocolHandler ["http-nio-8123"] +[15:44:00.877][org.apache.juli.logging.DirectJDKLog - log - 173] Starting service [Tomcat] +[15:44:00.877][org.apache.juli.logging.DirectJDKLog - log - 173] Starting Servlet engine: [Apache Tomcat/9.0.36] +[15:44:00.932][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring embedded WebApplicationContext +[15:44:01.043][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor +[15:44:01.044][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: restartedMain +[15:44:01.053][org.quartz.core.SchedulerSignalerImpl - - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +[15:44:01.054][org.quartz.core.QuartzScheduler - - 229] Quartz Scheduler v.2.3.2 created. +[15:44:01.054][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized. +[15:44:01.055][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +[15:44:01.055][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' +[15:44:01.055][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2 +[15:44:01.377][org.apache.juli.logging.DirectJDKLog - log - 173] Starting ProtocolHandler ["http-nio-8123"] +[15:44:01.402][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] []Starting Quartz task ... +[15:44:01.408][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. +[15:44:01.412][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplication in 1.966 seconds (JVM running for 2.734) +[15:44:08.746][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring DispatcherServlet 'dispatcherServlet' +[15:44:09.575][com.ynxbd.push.config.IniConfig - - 31] IP:10.37.129.2 +[15:44:09.577][WxCacheRequest - getWxAccessToken - 58] 启动医院为:(本地)蒙自市第一人民医院 +[15:44:09.612][WxCacheRequest - getWxAccessToken - 58] 启动医院为:(本地)蒙自市第一人民医院 +[15:44:09.618][WxCacheRequest - getWxAccessToken - 58] 启动医院为:(本地)蒙自市第一人民医院 +[15:44:09.623][WxCacheRequest - getWxAccessToken - 58] 启动医院为:(本地)蒙自市第一人民医院 +[15:44:09.892][weixin.popular.client.LocalHttpClient - loggerRequest - 257] URI[6e6cc995-4014-4452-b42b-d10222d693f6] https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token&lang=zh_CN +[15:44:10.166][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[6e6cc995-4014-4452-b42b-d10222d693f6] elapsed time:275 ms RESPONSE DATA:{"errcode":41001,"errmsg":"access_token missing rid: 62d903ca-02c4bc43-5edaae1e"} +[15:44:35.196][WxCacheRequest - getWxAccessToken - 58] 启动医院为:(本地)蒙自市第一人民医院 +[15:44:35.212][weixin.popular.client.LocalHttpClient - loggerRequest - 257] URI[4829c1d7-228d-4a48-9da7-66b6ed57858d] https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token&lang=zh_CN +[15:44:35.285][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[4829c1d7-228d-4a48-9da7-66b6ed57858d] elapsed time:73 ms RESPONSE DATA:{"errcode":41001,"errmsg":"access_token missing rid: 62d903e3-717a2262-3c394660"} +[15:45:19.389][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplication on absorber.local with PID 63878 (/Users/absorber/Downloads/wx-push/target/classes started by absorber in /Users/absorber/Downloads/wx-push) +[15:45:19.391][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default +[15:45:20.607][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing ProtocolHandler ["http-nio-8123"] +[15:45:20.608][org.apache.juli.logging.DirectJDKLog - log - 173] Starting service [Tomcat] +[15:45:20.608][org.apache.juli.logging.DirectJDKLog - log - 173] Starting Servlet engine: [Apache Tomcat/9.0.36] +[15:45:20.663][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring embedded WebApplicationContext +[15:45:20.752][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor +[15:45:20.753][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: restartedMain +[15:45:20.758][org.quartz.core.SchedulerSignalerImpl - - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +[15:45:20.758][org.quartz.core.QuartzScheduler - - 229] Quartz Scheduler v.2.3.2 created. +[15:45:20.758][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized. +[15:45:20.759][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +[15:45:20.759][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' +[15:45:20.759][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2 +[15:45:21.049][org.apache.juli.logging.DirectJDKLog - log - 173] Starting ProtocolHandler ["http-nio-8123"] +[15:45:21.078][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] []Starting Quartz task ... +[15:45:21.086][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. +[15:45:21.090][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplication in 2.035 seconds (JVM running for 2.671) +[15:45:25.436][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring DispatcherServlet 'dispatcherServlet' +[15:45:26.252][com.ynxbd.push.config.IniConfig - - 31] IP:10.37.129.2 +[15:45:26.254][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:45:26.290][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:45:26.294][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:45:26.298][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:45:26.581][weixin.popular.client.LocalHttpClient - loggerRequest - 257] URI[0873d514-a726-455a-b271-5c979f16c022] https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token&lang=zh_CN +[15:45:26.865][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[0873d514-a726-455a-b271-5c979f16c022] elapsed time:284 ms RESPONSE DATA:{"errcode":41001,"errmsg":"access_token missing rid: 62d90416-4a9bf85b-32945600"} +[15:45:40.235][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:45:40.273][weixin.popular.client.LocalHttpClient - loggerRequest - 257] URI[3a5c66f8-43db-47a8-8fcc-7bc120c635dc] https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token&lang=zh_CN +[15:45:40.505][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[3a5c66f8-43db-47a8-8fcc-7bc120c635dc] elapsed time:231 ms RESPONSE DATA:{"errcode":41001,"errmsg":"access_token missing rid: 62d90424-3baccba1-1f925962"} +[15:47:04.008][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplication on absorber.local with PID 63927 (/Users/absorber/Downloads/wx-push/target/classes started by absorber in /Users/absorber/Downloads/wx-push) +[15:47:04.010][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default +[15:47:05.147][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing ProtocolHandler ["http-nio-8123"] +[15:47:05.149][org.apache.juli.logging.DirectJDKLog - log - 173] Starting service [Tomcat] +[15:47:05.149][org.apache.juli.logging.DirectJDKLog - log - 173] Starting Servlet engine: [Apache Tomcat/9.0.36] +[15:47:05.199][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring embedded WebApplicationContext +[15:47:05.295][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor +[15:47:05.296][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: restartedMain +[15:47:05.302][org.quartz.core.SchedulerSignalerImpl - - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +[15:47:05.302][org.quartz.core.QuartzScheduler - - 229] Quartz Scheduler v.2.3.2 created. +[15:47:05.302][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized. +[15:47:05.303][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +[15:47:05.303][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' +[15:47:05.303][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2 +[15:47:05.593][org.apache.juli.logging.DirectJDKLog - log - 173] Starting ProtocolHandler ["http-nio-8123"] +[15:47:05.622][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] []Starting Quartz task ... +[15:47:05.628][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. +[15:47:05.632][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplication in 1.996 seconds (JVM running for 2.789) +[15:47:10.440][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring DispatcherServlet 'dispatcherServlet' +[15:47:11.275][com.ynxbd.push.config.IniConfig - - 31] IP:10.37.129.2 +[15:47:11.277][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:47:11.310][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:47:11.314][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:47:11.316][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:47:11.594][weixin.popular.client.LocalHttpClient - loggerRequest - 257] URI[6afe4efa-133a-45c1-804b-013c7d014563] https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token&lang=zh_CN +[15:47:11.869][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[6afe4efa-133a-45c1-804b-013c7d014563] elapsed time:276 ms RESPONSE DATA:{"errcode":41001,"errmsg":"access_token missing rid: 62d9047f-00e94d66-08b67f56"} +[15:47:21.774][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:47:21.790][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:47:21.800][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:47:21.812][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:47:21.819][weixin.popular.client.LocalHttpClient - loggerRequest - 257] URI[60825f3b-b0fb-42c5-86ed-2211ff96c512] https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token&lang=zh_CN +[15:47:21.885][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[60825f3b-b0fb-42c5-86ed-2211ff96c512] elapsed time:66 ms RESPONSE DATA:{"errcode":41001,"errmsg":"access_token missing rid: 62d90489-2f1501fa-10b09f13"} +[15:51:53.104][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplication on absorber.local with PID 64020 (/Users/absorber/Downloads/wx-push/target/classes started by absorber in /Users/absorber/Downloads/wx-push) +[15:51:53.108][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default +[15:51:54.530][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing ProtocolHandler ["http-nio-8123"] +[15:51:54.532][org.apache.juli.logging.DirectJDKLog - log - 173] Starting service [Tomcat] +[15:51:54.532][org.apache.juli.logging.DirectJDKLog - log - 173] Starting Servlet engine: [Apache Tomcat/9.0.36] +[15:51:54.585][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring embedded WebApplicationContext +[15:51:54.675][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor +[15:51:54.676][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: restartedMain +[15:51:54.680][org.quartz.core.SchedulerSignalerImpl - - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +[15:51:54.681][org.quartz.core.QuartzScheduler - - 229] Quartz Scheduler v.2.3.2 created. +[15:51:54.681][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized. +[15:51:54.682][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +[15:51:54.682][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' +[15:51:54.682][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2 +[15:51:54.999][org.apache.juli.logging.DirectJDKLog - log - 173] Starting ProtocolHandler ["http-nio-8123"] +[15:51:55.029][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] []Starting Quartz task ... +[15:51:55.036][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. +[15:51:55.040][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplication in 2.325 seconds (JVM running for 3.159) +[15:53:26.451][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplication on absorber.local with PID 64041 (/Users/absorber/Downloads/wx-push/target/classes started by absorber in /Users/absorber/Downloads/wx-push) +[15:53:26.453][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default +[15:53:27.667][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing ProtocolHandler ["http-nio-8123"] +[15:53:27.669][org.apache.juli.logging.DirectJDKLog - log - 173] Starting service [Tomcat] +[15:53:27.669][org.apache.juli.logging.DirectJDKLog - log - 173] Starting Servlet engine: [Apache Tomcat/9.0.36] +[15:53:27.731][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring embedded WebApplicationContext +[15:53:27.819][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor +[15:53:27.820][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: restartedMain +[15:53:27.824][org.quartz.core.SchedulerSignalerImpl - - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +[15:53:27.825][org.quartz.core.QuartzScheduler - - 229] Quartz Scheduler v.2.3.2 created. +[15:53:27.825][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized. +[15:53:27.826][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +[15:53:27.826][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' +[15:53:27.826][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2 +[15:53:28.100][org.apache.juli.logging.DirectJDKLog - log - 173] Starting ProtocolHandler ["http-nio-8123"] +[15:53:28.130][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] []Starting Quartz task ... +[15:53:28.138][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. +[15:53:28.142][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplication in 2.031 seconds (JVM running for 2.664) +[15:53:32.421][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring DispatcherServlet 'dispatcherServlet' +[15:53:33.263][com.ynxbd.push.config.IniConfig - - 31] IP:10.37.129.2 +[15:53:33.266][WxCacheRequest - getWxAccessToken - 59] 启动医院为:(本地)蒙自市第一人民医院 +[15:53:33.457][WxCacheRequest - getWxAccessToken - 61] access_code:200 +[15:53:33.463][WxCacheRequest - getWxAccessToken - 63] access_token:59_vfTkhTVx3IQDup-W54HuGwW89_6rbcXQUAvgHxJ5UaT2e6FL33gj-BghbAhx3sg2bCBa2uBdw-5qxj3JxIiPDMKQp0QLJh32xfUmMydQntM0Ry2Ri_lOWWhz6ZdFLWv3EkZ-bV0CSR1uLO2DRBWaAGAHRM +[15:53:33.708][weixin.popular.client.LocalHttpClient - loggerRequest - 257] URI[275474df-17e7-4f12-9fa7-f00451aa5762] https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=59_vfTkhTVx3IQDup-W54HuGwW89_6rbcXQUAvgHxJ5UaT2e6FL33gj-BghbAhx3sg2bCBa2uBdw-5qxj3JxIiPDMKQp0QLJh32xfUmMydQntM0Ry2Ri_lOWWhz6ZdFLWv3EkZ-bV0CSR1uLO2DRBWaAGAHRM&lang=zh_CN +[15:53:34.236][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[275474df-17e7-4f12-9fa7-f00451aa5762] elapsed time:530 ms RESPONSE DATA:{"template_list":[{"template_id":"gEe0a8JwbNw_rII5nzM9b5ipsqu7eoMzUM4oU4ndcoI","title":"订阅模板消息","primary_industry":"","deputy_industry":"","content":"{{content.DATA}}","example":""},{"template_id":"Rt30w4zFMuKe62wpEfELZkC42qjVVs1j9nOm2pnuPWk","title":"信息完善提醒","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n信息类型:{{keyword1.DATA}}\n医院:{{keyword2.DATA}}\n{{remark.DATA}}","example":"您好,为了更好跟踪您的病情,请完善您的个人信息\r\n信息类型:生活习惯\r\n医院:广东省中医院\r\n点击完善个人信息。"},{"template_id":"CkUk68zgI2nU2eHHQ6K-6RuJDbDQbf_xw6EVyfpYiKs","title":"排队叫号提醒","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n科室:{{keyword1.DATA}}\n医生:{{keyword2.DATA}}\n当前叫号:{{keyword3.DATA}}\n本人号码:{{keyword4.DATA}}\n需等待人数:{{keyword5.DATA}}\n{{remark.DATA}}","example":"您已进入候诊队列,请及时查看。\r\n科室:内科\r\n医生:张医生\r\n当前叫号:001\r\n本人号码:009\r\n需等待人数:8\r\n请合理安排好时间及时就诊,以免过号。"},{"template_id":"tbHXha5siTC1Fs0vCXQoHB0zlKmgtOp2Ihf_CzH2d4o","title":"健康卡成功升级通知","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n升级时间:{{keyword1.DATA}}\n升级说明:{{keyword2.DATA}}\n{{remark.DATA}}","example":"您已成功将就诊卡升级为健康卡!\r\n升级时间:2014年7月21日 18:36\r\n升级说明:健康卡可完全替代就诊卡,支持区域内多家医院跨院就医,无需重复办卡,实现线上挂号缴费,线下扫码就医。\r\n点击查看健康卡"},{"template_id":"yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI","title":"绑定通知","primary_industry":"医疗护理","deputy_industry":"医药医疗","content":"{{first.DATA}}\n内容:{{keyword1.DATA}}\n时间:{{keyword2.DATA}}\n{{remark.DATA}}","example":"刘先生,你好:\r\n内容:某某医生提醒您尽快绑定xx账号,以便沟通\r\n时间:2015年9月29日 12:36\r\n点击详情查看更多"}]} +[15:53:34.260][com.ynxbd.push.controller.SendMessageController - templateMessageSend - 93] template_id:yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI +[15:53:34.260][com.ynxbd.push.controller.SendMessageController - templateMessageSend - 94] code:0 +[15:53:34.260][com.ynxbd.push.controller.SendMessageController - templateMessageSend - 95] open_id:34AA9283E73A1796A8A89DCB5D6CCA721024D2B37F85D3740B2B51C650D4D610 +[15:53:34.304][com.ynxbd.push.helper.MessageApiHelper - templateMessage - 76] SendTenCentJson:{"data":{"keyword5":{"color":"#173177","value":null},"keyword3":{"color":"#173177","value":null},"keyword4":{"color":"#173177","value":null},"keyword1":{"color":"#173177","value":"测试"},"keyword2":{"color":"#173177","value":"测试"},"remark":{"color":"#173177","value":"测试"},"first":{"color":"#173177","value":"测试"}},"template_id":"yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI","touser":"oX5GuwV9DOhctadDV3OD7vkWQpGE","url":null,"miniprogram":{"pagepath":null,"appid":null},"title":null,"scene":null} +[15:53:34.314][weixin.popular.client.LocalHttpClient - loggerRequest - 250] URI[2a6ca860-f4ef-4eaf-8a1d-7fad8b822804] https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=59_vfTkhTVx3IQDup-W54HuGwW89_6rbcXQUAvgHxJ5UaT2e6FL33gj-BghbAhx3sg2bCBa2uBdw-5qxj3JxIiPDMKQp0QLJh32xfUmMydQntM0Ry2Ri_lOWWhz6ZdFLWv3EkZ-bV0CSR1uLO2DRBWaAGAHRM Content-Type: text/plain; charset=UTF-8 ContentLength:511 Content:{"data":{"keyword5":{"color":"#173177","value":null},"keyword3":{"color":"#173177","value":null},"keyword4":{"color":"#173177","value":null},"keyword1":{"color":"#173177","value":"测试"},"keyword2":{"color":"#173177","value":"测试"},"remark":{"color":"#173177","value":"测试"},"first":{"color":"#173177","value":"测试"}},"template_id":"yN0-xsCzSlDRcGZlMhifWBkziwyGlBHXrK-fzF76EzI","touser":"oX5GuwV9DOhctadDV3OD7vkWQpGE","url":null,"miniprogram":{"pagepath":null,"appid":null},"title":null,"scene":null} +[15:53:34.654][weixin.popular.client.JsonResponseHandler$JsonResponseHandlerImpl - handleResponse - 39] URI[2a6ca860-f4ef-4eaf-8a1d-7fad8b822804] elapsed time:340 ms RESPONSE DATA:{"errcode":0,"errmsg":"ok","msgid":2496411885748420612} +[15:53:34.661][com.ynxbd.push.helper.MessageApiHelper - templateMessageSend - 63] TenCent Return Message0 +[16:10:51.628][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplicationTests on absorber.local with PID 64330 (started by absorber in /Users/absorber/Downloads/wx-push) +[16:10:51.632][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default +[16:10:52.760][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor +[16:10:52.762][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: main +[16:10:52.771][org.quartz.core.SchedulerSignalerImpl - - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +[16:10:52.771][org.quartz.core.QuartzScheduler - - 229] Quartz Scheduler v.2.3.2 created. +[16:10:52.772][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized. +[16:10:52.773][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +[16:10:52.773][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' +[16:10:52.773][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2 +[16:10:53.905][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] []Starting Quartz task ... +[16:10:53.915][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. +[16:10:53.922][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplicationTests in 2.738 seconds (JVM running for 4.003) +[16:10:54.250][org.quartz.core.QuartzScheduler - shutdown - 666] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down. +[16:10:54.252][org.quartz.core.QuartzScheduler - standby - 585] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused. +[16:10:54.253][org.quartz.core.QuartzScheduler - shutdown - 740] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete. diff --git a/logs/warn.log b/logs/warn.log new file mode 100644 index 0000000..e69de29 diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..8a8fb22 --- /dev/null +++ b/mvnw @@ -0,0 +1,316 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..1d8ab01 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,188 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..88ca4fe --- /dev/null +++ b/pom.xml @@ -0,0 +1,150 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.3.1.RELEASE + + + com.ynxbd + push + 0.0.1 + push + wx push + + + 1.8 + 3.0.0 + 1.2.11 + 1.2.83 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + + org.projectlombok + lombok + true + + + + org.ehcache + ehcache + 3.9.9 + + + + + ch.qos.logback + logback-classic + + + + commons-codec + commons-codec + 1.15 + + + + + org.dom4j + dom4j + 2.1.3 + + + + org.springframework.boot + spring-boot-starter-test + test + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + org.apache.commons + commons-lang3 + 3.4 + + + + org.apache.commons + commons-compress + 1.19 + + + + + com.github.liyiorg + weixin-popular + 2.8.30 + + + + + mysql + mysql-connector-java + 5.1.47 + + + + org.quartz-scheduler + quartz + 2.3.2 + + + + org.apache.httpcomponents + httpasyncclient + 4.1.4 + + + + org.apache.httpcomponents + httpcore-nio + 4.4.3 + + + + org.ini4j + ini4j + 0.5.4 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + org.projectlombok + lombok + + + + + + + + diff --git a/src/main/java/com/ynxbd/push/AppApplication.java b/src/main/java/com/ynxbd/push/AppApplication.java new file mode 100644 index 0000000..76a6285 --- /dev/null +++ b/src/main/java/com/ynxbd/push/AppApplication.java @@ -0,0 +1,19 @@ +package com.ynxbd.push; + +import com.ynxbd.push.config.IniConfig; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +@Slf4j +@SpringBootApplication() +public class AppApplication extends SpringBootServletInitializer { + + + public static void main(String[] args) { + SpringApplication.run(AppApplication.class, args); + log.info("启动医院为:{}", IniConfig.getInstance("name")); + } +} diff --git a/src/main/java/com/ynxbd/push/config/EhCacheConfig.java b/src/main/java/com/ynxbd/push/config/EhCacheConfig.java new file mode 100644 index 0000000..edb6d02 --- /dev/null +++ b/src/main/java/com/ynxbd/push/config/EhCacheConfig.java @@ -0,0 +1,150 @@ +package com.ynxbd.push.config; + +import lombok.extern.slf4j.Slf4j; +import org.ehcache.Cache; +import org.ehcache.CacheManager; +import org.ehcache.config.ResourcePools; +import org.ehcache.config.ResourceType; +import org.ehcache.config.builders.CacheConfigurationBuilder; +import org.ehcache.config.builders.CacheManagerBuilder; +import org.ehcache.config.builders.ExpiryPolicyBuilder; +import org.ehcache.config.builders.ResourcePoolsBuilder; +import org.ehcache.config.units.MemoryUnit; +import org.ehcache.xml.XmlConfiguration; + +import java.net.URL; +import java.time.Duration; + +/** + * EHCache缓存 + * + * @Author wsq + * @Date 2020-09-09 11:50 + */ +@Slf4j +public class EhCacheConfig { + + // 私有化构造方法 + private EhCacheConfig() { + } + + private static CacheManager cacheManager = null; + + private static Cache cache = null; + + static { + initCacheManager(); + } + + public synchronized static void initCacheManager() { + if (cacheManager == null) { + URL url = EhCacheConfig.class.getResource("/ehcache.xml"); + if (url != null) { + XmlConfiguration xmlConfiguration = new XmlConfiguration(url); + cacheManager = CacheManagerBuilder.newCacheManager(xmlConfiguration); + cacheManager.init(); + cache = cacheManager.getCache("default_cache", String.class, String.class); + } else { + log.error("EHCache读取配置文件失败"); + } + } + } + + public static Cache getDefaultCache() { + if (cache == null) { + if (cacheManager == null) { + initCacheManager(); + } + cache = cacheManager.getCache("default_cache", String.class, String.class); + } + return cache; + } + + /** + * 创建一个缓存 + * + * @param K key + * @param V val + * @param cacheName 缓存名 + * @param timeToLiveExpiration 最大过期时间(S) + * @return 缓存 + */ + public static Cache createCacheTTL(Class K, Class V, String cacheName, Long timeToLiveExpiration) { + return createCache(K, V, cacheName, null, null, null, true, timeToLiveExpiration, null); + } + + /** + * 创建一个缓存 + * + * @param cacheName 缓存名 + * @param timeToIdleExpiration 最大空闲时间(S) + * @return 缓存 + */ + public static Cache createCacheTTI(Class K, Class V, String cacheName, Long timeToIdleExpiration) { + return createCache(K, V, cacheName, null, null, null, true, null, timeToIdleExpiration); + } + + /** + * 创建一个缓存 + * + * @param cacheName 缓存名 + * @param heap 堆内缓存大小(MB) + * @param offHeap 堆外缓存大小(MB) + * @param disk 磁盘缓存大小(MB) + * @param isPersistent 重启时是否从磁盘中读取 + *

+ * 两者不可并存,方法中两者同时存在时以[ttl最大存活时间为主] + * @param timeToLiveExpiration 最大存活时间(S) + * @param timeToIdleExpiration 该时间内未访问则失效(S) + * @return 缓存对象 + */ + public synchronized static Cache createCache(Class K, Class V, String cacheName, Long heap, Long offHeap, Long disk, boolean isPersistent, Long timeToLiveExpiration, Long timeToIdleExpiration) { + if (timeToLiveExpiration != null && timeToIdleExpiration != null) { + timeToIdleExpiration = null; + } + + if (cacheManager == null) { + initCacheManager(); + } + + if (heap == null || offHeap == null || disk == null) { + // 读取xml配置 + ResourcePools resourcePools = cache.getRuntimeConfiguration().getResourcePools(); + System.out.println(resourcePools); + heap = resourcePools.getPoolForResource(ResourceType.Core.HEAP).getSize(); + offHeap = resourcePools.getPoolForResource(ResourceType.Core.OFFHEAP).getSize(); + disk = resourcePools.getPoolForResource(ResourceType.Core.DISK).getSize(); + } + + Cache cache = cacheManager.getCache(cacheName, K, V); + if (cache != null) { + return cache; + } + + return cacheManager.createCache(cacheName, + CacheConfigurationBuilder.newCacheConfigurationBuilder(K, V, + ResourcePoolsBuilder.newResourcePoolsBuilder() + .heap(heap, MemoryUnit.MB) + .offheap(offHeap, MemoryUnit.MB) + .disk(disk, MemoryUnit.MB, isPersistent)).withExpiry( + timeToLiveExpiration == null + ? ExpiryPolicyBuilder.timeToIdleExpiration(Duration.ofSeconds(timeToIdleExpiration)) + : ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofSeconds(timeToLiveExpiration)) + ) + ); + } + + public static void close() { + if (cacheManager != null) cacheManager.close(); + } + + + public static void main(String[] args) throws InterruptedException { + Cache testCache = EhCacheConfig.createCacheTTL(String.class, String.class, "test", 3600L); + + testCache.put("1", "123"); + System.out.println(testCache.get("1")); + + cacheManager.close(); + } +} diff --git a/src/main/java/com/ynxbd/push/config/IniConfig.java b/src/main/java/com/ynxbd/push/config/IniConfig.java new file mode 100644 index 0000000..feaf7da --- /dev/null +++ b/src/main/java/com/ynxbd/push/config/IniConfig.java @@ -0,0 +1,73 @@ +package com.ynxbd.push.config; + +import com.ynxbd.push.helper.IPHelper; +import com.ynxbd.push.helper.ProperHelper; +import lombok.extern.slf4j.Slf4j; +import org.ini4j.Wini; +import org.springframework.util.ResourceUtils; + +import java.io.IOException; +import java.io.InputStream; + + +/** + * 获取有关appId跟secret等相关配置信息 + * + * @author 李进才 + * 单例模式-静态代码块 + */ +@Slf4j +public class IniConfig { + private IniConfig() { + } + + private static final Wini WINI; + private static final String IP; + + // 静态内部类保证Wini只实例化一次 + static { + WINI = initConfig(); + IP = IPHelper.getIp(); + log.info("IP:{}", IP); + } + + /** + * 获取项目的配置信息 + */ + public synchronized static Wini initConfig() { + try { + Wini wini = new Wini(); + try (InputStream in = IniConfig.class.getClassLoader().getResourceAsStream("weChat.ini")) { + wini.load(in); + } catch (IOException e) { + e.printStackTrace(); + } + return wini; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 获取项目的配置信息 + * + * @param key 配置信息的关键词 + */ + public static String getInstance(String key) { + return WINI.fetch(IP, key); + } + + /** + * 测试是否读取成功 + * + */ + public static String test() { + return WINI.fetch("10.20.10.60", "name"); + } + + public static void main(String[] args) { + System.out.println(test()); + } +} diff --git a/src/main/java/com/ynxbd/push/controller/MiddlePlatformController.java b/src/main/java/com/ynxbd/push/controller/MiddlePlatformController.java new file mode 100644 index 0000000..41a30b4 --- /dev/null +++ b/src/main/java/com/ynxbd/push/controller/MiddlePlatformController.java @@ -0,0 +1,51 @@ +package com.ynxbd.push.controller; + + +import com.ynxbd.push.config.IniConfig; +import com.ynxbd.push.entity.tencent.SendMessageTemplate; +import com.ynxbd.push.helper.DesEncryptHelper; +import com.ynxbd.push.helper.MessageApiHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import weixin.popular.bean.message.MessageSendResult; + +import java.io.IOException; + + +/** + * @author absorber + */ +@Slf4j +@Controller +public class MiddlePlatformController { + + + @GetMapping(value = "DaoYiXun") + @ResponseBody + public MessageSendResult daoYiXun(String openId, String deptName, String deptCode, String patientName, String content) throws IOException { + String templateId = IniConfig.getInstance("daoYiXunTemplateId"); + openId = DesEncryptHelper.deCode(openId); + log.info("openid={}, templateId={}", openId, templateId); + + String daoYiXunAppId = IniConfig.getInstance("daoYiXunAppId"); + String daoYiXunSecret = IniConfig.getInstance("daoYiXunSecret"); + String daoYiXunHospitalId = IniConfig.getInstance("daoYiXunHospitalId"); + SendMessageTemplate sendMessageTemplate = SendMessageTemplate.builder() + .appId(daoYiXunAppId) + .template_id(templateId) + .keyword1(patientName) + .keyword2(content) + .keyword3(deptName) + .first("点击进入导航") + .openId(openId) + .url(new StringBuilder().append("https://map.ipsmap.com?id=").append(daoYiXunHospitalId) + .append("&poi=0324&appKey=").append(daoYiXunSecret).toString()) + .pagePath(new StringBuilder().append("pages/index?id=").append(daoYiXunHospitalId) + .append("&poi=").append(deptCode).append("&appKey=").append(daoYiXunSecret).toString()) + .build(); + + return MessageApiHelper.templateMessageSend(sendMessageTemplate); + } +} diff --git a/src/main/java/com/ynxbd/push/controller/RegisteredController.java b/src/main/java/com/ynxbd/push/controller/RegisteredController.java new file mode 100644 index 0000000..c7fe414 --- /dev/null +++ b/src/main/java/com/ynxbd/push/controller/RegisteredController.java @@ -0,0 +1,125 @@ +package com.ynxbd.push.controller; + + +import com.ynxbd.push.config.IniConfig; +import com.ynxbd.push.entity.tencent.SendMessageTemplate; +import com.ynxbd.push.helper.DesEncryptHelper; +import com.ynxbd.push.helper.MessageApiHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import weixin.popular.bean.message.MessageSendResult; + +import java.io.IOException; + + +/** + * @author 李进才 + * @ClassName RegisteredController + * @Description 微信挂号相关提醒 + * @date 2021/12/6 4:07 下午 + */ +@Slf4j +@Controller +public class RegisteredController { + + /** + * 预约挂号成功提醒 对应我代码规定的第12个模版 code 12 + * + * @param openId + * @param deptName + * @param patientName + * @param sex + * @param seq + * @return + */ + @GetMapping(value = "AppointmentSuccess") + @ResponseBody + public MessageSendResult AppointmentSuccess(String openId, String doctor, String deptName, String patientName, String sex, String seq) throws IOException { + String templateId = IniConfig.getInstance("templateId12"); + String hospital = IniConfig.getInstance("name"); + openId = DesEncryptHelper.deCode(openId); + + log.info("openid={}, patientName={}, deptName={}, seq={}", openId, patientName, deptName, seq); + + + SendMessageTemplate sendMessageTemplate = SendMessageTemplate.builder() + .template_id(templateId) + .code(12) + .doctor(doctor) + .openId(openId) + .department(deptName) + .patientName(patientName) + .hospitalName(hospital) + .first("预约挂号成功") + .seq(seq) + .patientSex(sex) + .remarkColor("#fa4028") + .remark(IniConfig.getInstance("remark12")) + .build(); + + return MessageApiHelper.templateMessageSend(sendMessageTemplate); + } + + /** + * 取消预约挂号 对应我代码规定的第9个模版 code 9 + * + * @param deptName + * @param doctor + * @param treatTime + * @param openId + * @param patientName + * @param seq + * @return + * @throws IOException + */ + @GetMapping(value = "AppointmentCancel") + @ResponseBody + public MessageSendResult AppointmentCancel(String deptName, String doctor, String treatTime, String openId, String patientName, String seq) throws IOException { + String templateId = IniConfig.getInstance("templateId9"); + String hospital = IniConfig.getInstance("name"); + openId = DesEncryptHelper.deCode(openId); + SendMessageTemplate sendMessageTemplate = SendMessageTemplate.builder() + .template_id(templateId) + .openId(openId) + .keyword1(hospital) + .keyword2(deptName) + .keyword3(doctor) + .keyword4(treatTime) + .remarkColor("#fa4028") + .remark(new StringBuilder().append("取消预约,").append("患者姓名:").append(patientName).append(",").append("流水号:").append(seq).toString()) + .build(); + return MessageApiHelper.templateMessageSend(sendMessageTemplate); + } + + /** + * 缴费成功提醒 对应我代码规定的第4个模版 code 4 + * + * @param openId + * @param patientName + * @param deptName + * @param doctor + * @param allMoney + * @param payTime + * @return + * @throws IOException + */ + @GetMapping(value = "PaymentSuccess") + @ResponseBody + public MessageSendResult PaymentSuccess(String openId, String patientName, String deptName, String doctor, String allMoney, String payTime) throws IOException { + openId = DesEncryptHelper.deCode(openId); + String templateId = IniConfig.getInstance("templateId4"); + SendMessageTemplate sendMessageTemplate = SendMessageTemplate.builder() + .keyword1(patientName) + .keyword2(deptName) + .keyword3(doctor) + .keyword4(allMoney) + .keyword5(payTime) + .template_id(templateId) + .openId(openId) + .build(); + return MessageApiHelper.templateMessageSend(sendMessageTemplate); + } + +} diff --git a/src/main/java/com/ynxbd/push/controller/ReportController.java b/src/main/java/com/ynxbd/push/controller/ReportController.java new file mode 100644 index 0000000..e142816 --- /dev/null +++ b/src/main/java/com/ynxbd/push/controller/ReportController.java @@ -0,0 +1,66 @@ +package com.ynxbd.push.controller; + +import com.ynxbd.push.config.IniConfig; +import com.ynxbd.push.entity.tencent.SendMessageTemplate; +import com.ynxbd.push.entity.tencent.WeChatResponse; +import com.ynxbd.push.helper.DesEncryptHelper; +import com.ynxbd.push.helper.MessageApiHelper; +import org.apache.http.Header; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.client.methods.RequestBuilder; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import weixin.popular.bean.message.MessageSendResult; +import weixin.popular.client.LocalHttpClient; + +import java.io.IOException; + +/** + * @author 李进才 + * @ClassName ReportController + * @Description 发送lis报告单结果推送 + * @date 2021/12/6 3:23 下午 + */ +@Controller +public class ReportController { + + public static final String NOT_FIND_DATA = "40004"; + protected static Header jsonHeader; + + @GetMapping(value = "Report") + @ResponseBody + public MessageSendResult ReportTip(String patientId, String itemName, String collectTime, String patientName) throws IOException { + String reportTemplateId = IniConfig.getInstance("lisReportTemplateId"); + String weChatUrl = IniConfig.getInstance("weChatUrl"); + HttpUriRequest httpUriRequest = RequestBuilder + .get() + .setHeader(jsonHeader) + .setUri(new StringBuilder() + .append(weChatUrl) + .append("patient/getOpenIdsByPatientId.do").toString()) + .addParameter("patientId", patientId) + .addParameter("algorithm", "des") + .addParameter("isEncryptComma", "false") + .addParameter("isLastBind", "true") + .build(); + WeChatResponse weChatResponse = LocalHttpClient.executeJsonResult(httpUriRequest, WeChatResponse.class); + if (weChatResponse.getData() == null) { + MessageSendResult messageSendResult = new MessageSendResult(); + messageSendResult.setErrcode(NOT_FIND_DATA); + messageSendResult.setMsg_status("NOT_FIND_DATA"); + return messageSendResult; + } + String openId = DesEncryptHelper.deCode(weChatResponse.getData()); + SendMessageTemplate sendMessageTemplate = SendMessageTemplate.builder() + .template_id(reportTemplateId) + .keyword1(itemName) + .keyword2(patientName) + .keyword3(collectTime) + .first("您的检验报告结果已经出来了") + .openId(openId) + .url(new StringBuilder().append(weChatUrl).append("web/all-result.html#/lis-report-inspect").toString()) + .build(); + return MessageApiHelper.templateMessageSend(sendMessageTemplate); + } +} diff --git a/src/main/java/com/ynxbd/push/controller/RsaController.java b/src/main/java/com/ynxbd/push/controller/RsaController.java new file mode 100644 index 0000000..6f8bfcc --- /dev/null +++ b/src/main/java/com/ynxbd/push/controller/RsaController.java @@ -0,0 +1,24 @@ +package com.ynxbd.push.controller; + +import com.ynxbd.push.helper.RSAHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; + + +/** + * @author 李进才 + */ +@Slf4j +@Controller +public class RsaController { + + @GetMapping(value = "PublicKey") + @ResponseBody + public String publicKey() { + log.info("privateKey={}" + RSAHelper.getPrivateKey()); + return RSAHelper.getPublicKey(); + } + +} diff --git a/src/main/java/com/ynxbd/push/controller/SendMessageController.java b/src/main/java/com/ynxbd/push/controller/SendMessageController.java new file mode 100644 index 0000000..b4a1fa2 --- /dev/null +++ b/src/main/java/com/ynxbd/push/controller/SendMessageController.java @@ -0,0 +1,175 @@ +package com.ynxbd.push.controller; + + +import com.ynxbd.push.entity.*; +import com.ynxbd.push.entity.tencent.AllUser; +import com.ynxbd.push.entity.tencent.SendMessageTemplate; +import com.ynxbd.push.entity.tencent.Subscribe; +import com.ynxbd.push.entity.tencent.WeChatUserInfo; +import com.ynxbd.push.helper.DesEncryptHelper; +import com.ynxbd.push.httpRequest.tencent.WeChatDataRequest; +import com.ynxbd.push.helper.MessageApiHelper; +import com.ynxbd.push.httpRequest.xbd.wx.WxCacheRequest; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import weixin.popular.bean.message.MessageSendResult; + +import java.io.IOException; + +/** + * @author 李进才 + */ +@Slf4j +@Controller +public class SendMessageController { + + + /** + * 发送微信客服消息接口 + * + * @param openId 客户openid,指示哪个用户 + * @param content 内容 + * @return 是否发送成功 + */ + + @GetMapping(value = "SendMessage") + @ResponseBody + public Boolean sendMessage(String openId, String content) { + openId = DesEncryptHelper.deCode(openId); + String messageSendResult = MessageApiHelper.sendTextForOpenId(openId, content).getErrcode(); + return "0".equals(messageSendResult); + } + + /** + * 发送微信客服带图片链接消息接口 + * + * @param openId 客户id,指示哪个用户 + * @param title 标题 + * @param description 描述 + * @param url 跳转链接 + * @param thumbUrl 图片链接 + * @return 是否发送成功 + */ + + @PostMapping(value = "SendLinkMessage") + @ResponseBody + public Boolean sendLinkMessage(String openId, String title, String description, String url, String thumbUrl) { + openId = DesEncryptHelper.deCode(openId); + String messageSendResult = MessageApiHelper.sendLinkForOpenId(openId, title, description, url, thumbUrl).getErrcode(); + return "0".equals(messageSendResult); + } + + /** + * 群发消息接口 + * + * @param content 内容 + * @return 是否发送成功 + */ + @GetMapping(value = "GroupMessage") + @ResponseBody + public Boolean groupMessage(String content) { + if (content == null) { + return false; + } + String messageSendResult = MessageApiHelper.group(content).getErrcode(); + return "0".equals(messageSendResult); + } + + /** + * 发送模板信息接口 + * + * @param sendMessageTemplate 不同模板的对应参数 + * @return 是否发送成功 + */ + @PostMapping(value = "TemplateMessageSend") + @ResponseBody + public MessageSendResult templateMessageSend(SendMessageTemplate sendMessageTemplate) { + if (StringUtils.isNotBlank(sendMessageTemplate.getDoctor())) { + sendMessageTemplate.setOpenId(WeChatDataRequest.getOpenIdForDoctorCode(sendMessageTemplate.getDoctorCode()).getData()); + } + if (StringUtils.isNotBlank(sendMessageTemplate.getTemplate_name()) && !StringUtils.isNotBlank(sendMessageTemplate.getTemplate_id())) { + sendMessageTemplate.setTemplate_id(WeChatDataRequest.getTemplateId(sendMessageTemplate.getTemplate_name())); + } + log.info("template_id:" + sendMessageTemplate.getTemplate_id()); + log.info("code:" + sendMessageTemplate.getCode()); + log.info("open_id:" + sendMessageTemplate.getOpenId()); + + sendMessageTemplate.setOpenId(DesEncryptHelper.deCode(sendMessageTemplate.getOpenId())); + return MessageApiHelper.templateMessageSend(sendMessageTemplate); + } + + /** + * 请求access_token + * + * @return access_token值 + */ + @PostMapping(value = "AccessToken") + @ResponseBody + public String accessToken() { + return WxCacheRequest.getAccessToken(); + } + + + /** + * 获取微信用户详细信息 + * + * @param openId + * @return + * @throws Exception + */ + @PostMapping(value = "UserInfo") + @ResponseBody + public WeChatUserInfo userInfo(String openId) throws Exception { + log.info("UserInfo:OpenId=" + DesEncryptHelper.deCode(openId)); + return WeChatDataRequest.userInfo(DesEncryptHelper.deCode(openId)); + } + + /** + * 解密 + * + * @param openId + * @return + */ + @GetMapping(value = "Encode") + @ResponseBody + public String encode(String openId) { + return DesEncryptHelper.enCode(openId); + } + + /** + * 获取所有用户openid + * + * @param nextOpenid + * @return + * @throws Exception + */ + @PostMapping(value = "GetAllUser") + @ResponseBody + public AllUser getAllUser(String nextOpenid) { + return MessageApiHelper.getAllUser(nextOpenid); + } + + /** + * 群发模版消息 + * + * @param sendMessageTemplate + * @return + * @throws Exception + */ + @PostMapping(value = "GroupTemplateMessage") + @ResponseBody + public CompleteThreadCount groupTemplateMessage(SendMessageTemplate sendMessageTemplate) throws IOException, InterruptedException { + return MessageApiHelper.groupTemplateSend(sendMessageTemplate); + } + + + @PostMapping(value = "SubscribeMessage") + @ResponseBody + public MessageSendResult subscribeMessage(Subscribe subscribe) throws Exception { + return MessageApiHelper.subscribeMessage(subscribe); + } +} diff --git a/src/main/java/com/ynxbd/push/controller/TestController.java b/src/main/java/com/ynxbd/push/controller/TestController.java new file mode 100644 index 0000000..248994c --- /dev/null +++ b/src/main/java/com/ynxbd/push/controller/TestController.java @@ -0,0 +1,18 @@ +package com.ynxbd.push.controller; + +import com.ynxbd.push.config.IniConfig; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("test") +public class TestController { + + @GetMapping("test01") + public String test01() { + String id = IniConfig.test(); + System.out.println(id); + return "success"; + } +} diff --git a/src/main/java/com/ynxbd/push/entity/CompleteThreadCount.java b/src/main/java/com/ynxbd/push/entity/CompleteThreadCount.java new file mode 100644 index 0000000..96f6466 --- /dev/null +++ b/src/main/java/com/ynxbd/push/entity/CompleteThreadCount.java @@ -0,0 +1,12 @@ +package com.ynxbd.push.entity; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CompleteThreadCount { + private Integer completed; + private Integer failed; + private Integer cancelled; +} diff --git a/src/main/java/com/ynxbd/push/entity/tencent/AllUser.java b/src/main/java/com/ynxbd/push/entity/tencent/AllUser.java new file mode 100644 index 0000000..5b3ceac --- /dev/null +++ b/src/main/java/com/ynxbd/push/entity/tencent/AllUser.java @@ -0,0 +1,16 @@ +package com.ynxbd.push.entity.tencent; + +import lombok.Data; +import lombok.ToString; +import weixin.popular.bean.BaseResult; + +import java.util.Map; + +@Data +@ToString +public class AllUser extends BaseResult { + private Integer total; + private Integer count; + private Map data; + private String next_openid; +} diff --git a/src/main/java/com/ynxbd/push/entity/tencent/LinkMessage.java b/src/main/java/com/ynxbd/push/entity/tencent/LinkMessage.java new file mode 100644 index 0000000..33af5ab --- /dev/null +++ b/src/main/java/com/ynxbd/push/entity/tencent/LinkMessage.java @@ -0,0 +1,48 @@ +package com.ynxbd.push.entity.tencent; + + + +import java.util.Map; + +/** + * 客户接口消息发送实体 + * + * @author + * @date 2018-2-6 11:00:30 + */ +public class LinkMessage { + + //openid + private String touser; + + //消息类型 + private String msgtype; + + //消息内容 + private Map link ; + + + public String getTouser() { + return touser; + } + + public void setTouser(String touser) { + this.touser = touser; + } + + public String getMsgtype() { + return msgtype; + } + + public void setMsgtype(String msgtype) { + this.msgtype = msgtype; + } + + public Map getLink() { + return link; + } + + public void setLink(Map link) { + this.link = link; + } +} \ No newline at end of file diff --git a/src/main/java/com/ynxbd/push/entity/tencent/OpenId.java b/src/main/java/com/ynxbd/push/entity/tencent/OpenId.java new file mode 100644 index 0000000..bdbce70 --- /dev/null +++ b/src/main/java/com/ynxbd/push/entity/tencent/OpenId.java @@ -0,0 +1,11 @@ +package com.ynxbd.push.entity.tencent; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class OpenId { + private String openid; + private String lang; +} diff --git a/src/main/java/com/ynxbd/push/entity/tencent/OpenIdList.java b/src/main/java/com/ynxbd/push/entity/tencent/OpenIdList.java new file mode 100644 index 0000000..02e04d6 --- /dev/null +++ b/src/main/java/com/ynxbd/push/entity/tencent/OpenIdList.java @@ -0,0 +1,16 @@ +package com.ynxbd.push.entity.tencent; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +/** + * @author 李进才 + */ +@Data +@Builder +public class OpenIdList { + List> openIds; + Integer count; +} diff --git a/src/main/java/com/ynxbd/push/entity/tencent/SendMessageTemplate.java b/src/main/java/com/ynxbd/push/entity/tencent/SendMessageTemplate.java new file mode 100644 index 0000000..fbe895a --- /dev/null +++ b/src/main/java/com/ynxbd/push/entity/tencent/SendMessageTemplate.java @@ -0,0 +1,84 @@ +package com.ynxbd.push.entity.tencent; + +import lombok.Builder; +import lombok.Data; +import lombok.experimental.Tolerate; + +/** + * @author absorber + */ +@Builder +@Data +public class SendMessageTemplate { + private int code; + public String template_id; + public String keyword1; + private String template_name; + private String keyword1Color = "#173177"; + public String keyword2; + private String keyword2Color = "#173177"; + public String keyword3; + private String keyword3Color = "#173177"; + public String keyword4; + private String keyword4Color = "#173177"; + public String keyword5; + private String keyword5Color = "#173177"; + private String openId; + private String url; + private String first; + private String firstColor = "#173177"; + private String patientName; + private String patientSex; + private String appId; + private String pagePath; + private String hospitalName; + private String department; + private String doctor; + private String seq; + private String remark; + + private String remarkColor = "#173177"; + /** + * 当前号码 + */ + private String currentNumber; + /** + * 自身号码 + */ + private String selfNumber; + /** + * 等待人数 + */ + private String waitNumber; + /** + * 检查结果通知-就诊项目 + */ + private String item; + private String time; + private String money; + private String bedNumber; + private String arrivalTime; + /** + * 信息完善提醒-消息类型 + */ + private String messageType; + /** + * 健康卡成功升级通知-升级说明 + */ + private String updateDescription; + /** + * 随访开始提醒-随访人员 + */ + private String followUpStaff; + + private Long timestamp; + + /** + * 医生工号 + */ + private String doctorCode; + + @Tolerate + SendMessageTemplate() { + } +} diff --git a/src/main/java/com/ynxbd/push/entity/tencent/Subscribe.java b/src/main/java/com/ynxbd/push/entity/tencent/Subscribe.java new file mode 100644 index 0000000..1915c79 --- /dev/null +++ b/src/main/java/com/ynxbd/push/entity/tencent/Subscribe.java @@ -0,0 +1,48 @@ +package com.ynxbd.push.entity.tencent; + +import lombok.Builder; +import lombok.Data; +import lombok.experimental.Tolerate; + +/** + * @author 李进才 + */ +@Data +@Builder +public class Subscribe { + /** + * openId + */ + private String touser; + /** + * 模版id + */ + private String template_id; + /** + * 跳转链接 + */ + private String url; + /** + * 小程序appId + */ + private String appid; + /** + * 小程序路径 + */ + private String pagepath; + /** + * 一次性订阅消息权值(1代表同意了1权值的消息发送,1就失效;0-10000) + */ + private Integer scene; + /** + * 标题 + */ + private String title; + /** + * 内容 + */ + private String content; + + @Tolerate + Subscribe(){} +} diff --git a/src/main/java/com/ynxbd/push/entity/tencent/Template.java b/src/main/java/com/ynxbd/push/entity/tencent/Template.java new file mode 100644 index 0000000..80fcc21 --- /dev/null +++ b/src/main/java/com/ynxbd/push/entity/tencent/Template.java @@ -0,0 +1,19 @@ +package com.ynxbd.push.entity.tencent; + +import lombok.Data; + +/** + * @author 李进才 + * @ClassName Template + * @Description description + * @date 2022/7/14 10:55 + */ +@Data +public class Template { + private String template_id; + private String title; + private String primary_industry; + private String deputy_industry; + private String content; + private String example; +} diff --git a/src/main/java/com/ynxbd/push/entity/tencent/TemplateJson.java b/src/main/java/com/ynxbd/push/entity/tencent/TemplateJson.java new file mode 100644 index 0000000..079fddd --- /dev/null +++ b/src/main/java/com/ynxbd/push/entity/tencent/TemplateJson.java @@ -0,0 +1,21 @@ +package com.ynxbd.push.entity.tencent; + +import lombok.Builder; +import lombok.Data; + +import java.util.Map; + +/** + * @author 李进才 + */ +@Data +@Builder +public class TemplateJson { + private Map data; + private String template_id; + private String touser; + private String url; + private Map miniprogram; + private String title; + private Integer scene; +} diff --git a/src/main/java/com/ynxbd/push/entity/tencent/TemplateJsonValue.java b/src/main/java/com/ynxbd/push/entity/tencent/TemplateJsonValue.java new file mode 100644 index 0000000..9f7e2f8 --- /dev/null +++ b/src/main/java/com/ynxbd/push/entity/tencent/TemplateJsonValue.java @@ -0,0 +1,14 @@ +package com.ynxbd.push.entity.tencent; + +import lombok.Builder; +import lombok.Data; + +/** + * @author 李进才 + */ +@Data +@Builder +public class TemplateJsonValue { + private String color; + private String value; +} diff --git a/src/main/java/com/ynxbd/push/entity/tencent/TemplateList.java b/src/main/java/com/ynxbd/push/entity/tencent/TemplateList.java new file mode 100644 index 0000000..7991b35 --- /dev/null +++ b/src/main/java/com/ynxbd/push/entity/tencent/TemplateList.java @@ -0,0 +1,17 @@ +package com.ynxbd.push.entity.tencent; + +import com.ynxbd.push.entity.tencent.Template; +import lombok.Data; + +import java.util.List; + +/** + * @author 李进才 + * @ClassName TemplateList + * @Description description + * @date 2022/7/14 10:54 + */ +@Data +public class TemplateList { + private List