diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java index 1ca4a859fd..fbbeebccbf 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java @@ -61,6 +61,7 @@ public enum EpmetErrorCode { HAVE_HANDLE(8123,"存在待处理事项,请先处理"), ACTUAL_TIME(8124,"请录入实际开始时间,实际结束时间"), ACTUAL_NOT_FINISHED(8125,"请先结束活动"), + ACT_SIGN_UP_END_TIME_EARLIER_NOW_EERROR(8121,"活动报名截止时间应晚于当前时间"), CANNOT_AUDIT_WARM(8201, "请完善居民信息"), NOT_DEL_AGENCY(8202, "该机关存在下级机关,不允许删除"), diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/filter/LogMsgSendFilter.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/filter/LogMsgSendFilter.java index fc5702f97a..4e2f0d16ab 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/filter/LogMsgSendFilter.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/filter/LogMsgSendFilter.java @@ -17,6 +17,9 @@ import org.springframework.cloud.commons.util.InetUtils; import org.springframework.core.env.Environment; import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * desc: 发送日志消息 @@ -25,150 +28,276 @@ import java.text.SimpleDateFormat; * @author: jianjun liu */ public class LogMsgSendFilter extends LevelFilter { - private static final Logger logger = LoggerFactory.getLogger(LogMsgSendFilter.class); - private DingdingMsgSender msgSender = new DingdingMsgSender(); - private String webHook; - private String secret; - private String appName; - - private String activeEnv; - private String serverIp; - - @Override - public FilterReply decide(ILoggingEvent event) { - //如果日志级别等于设置的日志级别 则发送消息 - if (event.getLevel().isGreaterOrEqual(Level.ERROR)) { - try { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("【日志告警】\n"); - - stringBuilder.append("\n"); - - stringBuilder.append("告警级别:" + event.getLevel()); - stringBuilder.append("\n"); - if (StringUtils.isNotBlank(appName)) { - stringBuilder.append("服务名称:" + appName); - stringBuilder.append("\n"); - } - getServerInfo(); - if (StringUtils.isNotBlank(activeEnv)) { - stringBuilder.append("告警环境:" + EnvEnum.getEnum(activeEnv).getName()); - stringBuilder.append("\n"); - } - - if (StringUtils.isNotBlank(serverIp)) { - stringBuilder.append("IP地址:" + serverIp); - stringBuilder.append("\n"); - } - stringBuilder.append("故障时间:" + formatLongTime2Str(event.getTimeStamp())); - stringBuilder.append("\n"); - stringBuilder.append("TraceId:" + Thread.currentThread().getName()); - stringBuilder.append("\n"); - stringBuilder.append("告警信息:" + event.getFormattedMessage()); - stringBuilder.append("\n"); - - IThrowableProxy throwableProxy = event.getThrowableProxy(); - //异常信息处理 暂时处理一级的5行数据 - apendStackInfo(stringBuilder, throwableProxy); - DingTalkTextMsg msg = new DingTalkTextMsg(); - msg.setContent(stringBuilder.toString()); - if (StringUtils.isNotBlank(webHook)) { - msg.setWebHook(webHook); - } - if (StringUtils.isNotBlank(secret)) { - msg.setSecret(secret); - } - boolean flag = msgSender.sendMsgAsync(msg); - if (!flag) { - logger.warn("msgSender.sendMsg fail,param:{}", stringBuilder.toString()); - } - } catch (Exception e) { - logger.warn("decide exception", e); - } - } - //交给其他filter继续向下处理 - return super.decide(event); - - } - - /** - * desc:获取服务 ip及profile信息 - */ - private void getServerInfo() { - try { - if (serverIp == null) { - InetUtils inetUtils = SpringContextUtils.getBean(InetUtils.class); - serverIp = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); - } - } catch (Exception e) { - logger.warn("getServerInfo get bean InetUtils exception", e); - return; - } - try { - if (activeEnv == null) { - Environment environment = SpringContextUtils.getBean(Environment.class); - String[] activeProfiles = environment.getActiveProfiles(); - if (activeProfiles != null && activeProfiles.length > 0) { - logger.info("activeProfiles:{}", activeProfiles); - activeEnv = activeProfiles[0]; - } - } - } catch (Exception e) { - logger.warn("getServerInfo get bean Environment exception", e); - } - } - - private void apendStackInfo(StringBuilder stringBuilder, IThrowableProxy throwableProxy) { - int defaultRowLine = 5; - if (throwableProxy != null) { - stringBuilder.append("异常信息:") - .append(throwableProxy.getClassName()) - .append(" : ") - .append(throwableProxy.getMessage()) - .append("\n"); - - StackTraceElementProxy[] stackTraceElementProxyArray = throwableProxy.getStackTraceElementProxyArray(); - StackTraceElementProxy stackTraceElementProxy = null; - - if (stackTraceElementProxyArray.length < defaultRowLine) { - defaultRowLine = stackTraceElementProxyArray.length; - } - for (int i = 0; i < defaultRowLine; i++) { - stackTraceElementProxy = stackTraceElementProxyArray[i]; - StackTraceElement stackTraceElement = stackTraceElementProxy.getStackTraceElement(); - stringBuilder.append("\t\tat "); - stringBuilder.append(stackTraceElement.getClassName()); - stringBuilder.append("."); - stringBuilder.append(stackTraceElement.getMethodName()); - stringBuilder.append("("); - stringBuilder.append(stackTraceElement.getFileName()); - stringBuilder.append(":"); - stringBuilder.append(stackTraceElement.getLineNumber()); - stringBuilder.append(")"); - stringBuilder.append("\n"); - } - } - } - - - private String formatLongTime2Str(long timestamp) { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); - return dateFormat.format(timestamp); - } - - public void setActiveEnv(String activeEnv) { - this.activeEnv = activeEnv; - } - - public void setAppName(String appName) { - this.appName = appName; - } - - public void setWebHook(String webHook) { - this.webHook = webHook; - } - - public void setSecret(String secret) { - this.secret = secret; - } + private static final Logger logger = LoggerFactory.getLogger(LogMsgSendFilter.class); + private DingdingMsgSender msgSender = new DingdingMsgSender(); + private String webHook; + private String secret; + private String appName; + + private String activeEnv; + private String serverIp; + private String baseProjectPackage = "com.epmet"; + + @Override + public FilterReply decide(ILoggingEvent event) { + //如果日志级别等于设置的日志级别 则发送消息 + if (event.getLevel().isGreaterOrEqual(Level.ERROR)) { + try { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("【日志告警】\n"); + + stringBuilder.append("\n"); + + stringBuilder.append("告警级别:" + event.getLevel()); + stringBuilder.append("\n"); + if (StringUtils.isNotBlank(appName)) { + stringBuilder.append("服务名称:" + appName); + stringBuilder.append("\n"); + } + getServerInfo(); + if (StringUtils.isNotBlank(activeEnv)) { + stringBuilder.append("告警环境:" + EnvEnum.getEnum(activeEnv).getName()); + stringBuilder.append("\n"); + } + + if (StringUtils.isNotBlank(serverIp)) { + stringBuilder.append("IP地址:" + serverIp); + stringBuilder.append("\n"); + } + stringBuilder.append("故障时间:" + formatLongTime2Str(event.getTimeStamp())); + stringBuilder.append("\n"); + stringBuilder.append("TraceId:" + Thread.currentThread().getName()); + stringBuilder.append("\n"); + String formattedMessage = event.getFormattedMessage(); + IThrowableProxy throwableProxy = event.getThrowableProxy(); + if (throwableProxy == null && formattedMessage.length() > 1000) { + formattedMessage = formattedMessage.substring(0, getCharacterPosition(formattedMessage, baseProjectPackage, 5)); + } + stringBuilder.append("告警信息:" + formattedMessage); + stringBuilder.append("\n"); + + + //异常信息处理 暂时处理一级的5行数据 + apendStackInfo(stringBuilder, throwableProxy); + DingTalkTextMsg msg = new DingTalkTextMsg(); + msg.setContent(stringBuilder.toString()); + if (StringUtils.isNotBlank(webHook)) { + msg.setWebHook(webHook); + } + if (StringUtils.isNotBlank(secret)) { + msg.setSecret(secret); + } + boolean flag = msgSender.sendMsgAsync(msg); + if (!flag) { + logger.warn("msgSender.sendMsg fail,param:{}", stringBuilder.toString()); + } + } catch (Exception e) { + logger.warn("decide exception", e); + } + } + //交给其他filter继续向下处理 + return super.decide(event); + + } + + /** + * desc:获取服务 ip及profile信息 + */ + private void getServerInfo() { + try { + if (serverIp == null) { + InetUtils inetUtils = SpringContextUtils.getBean(InetUtils.class); + serverIp = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); + } + } catch (Exception e) { + logger.warn("getServerInfo get bean InetUtils exception", e); + return; + } + try { + if (activeEnv == null) { + Environment environment = SpringContextUtils.getBean(Environment.class); + String[] activeProfiles = environment.getActiveProfiles(); + if (activeProfiles != null && activeProfiles.length > 0) { + logger.info("activeProfiles:{}", activeProfiles); + activeEnv = activeProfiles[0]; + } + } + } catch (Exception e) { + logger.warn("getServerInfo get bean Environment exception", e); + } + } + + private void apendStackInfo(StringBuilder stringBuilder, IThrowableProxy throwableProxy) { + int defaultRowLine = 5; + if (throwableProxy != null) { + stringBuilder.append("异常信息:") + .append(throwableProxy.getClassName()) + .append(" : ") + .append(throwableProxy.getMessage()) + .append("\n"); + + StackTraceElementProxy[] stackTraceElementProxyArray = throwableProxy.getStackTraceElementProxyArray(); + StackTraceElementProxy stackTraceElementProxy = null; + + if (stackTraceElementProxyArray.length < defaultRowLine) { + defaultRowLine = stackTraceElementProxyArray.length; + } + for (int i = 0; i < defaultRowLine; i++) { + stackTraceElementProxy = stackTraceElementProxyArray[i]; + StackTraceElement stackTraceElement = stackTraceElementProxy.getStackTraceElement(); + stringBuilder.append("\t\tat "); + stringBuilder.append(stackTraceElement.getClassName()); + stringBuilder.append("."); + stringBuilder.append(stackTraceElement.getMethodName()); + stringBuilder.append("("); + stringBuilder.append(stackTraceElement.getFileName()); + stringBuilder.append(":"); + stringBuilder.append(stackTraceElement.getLineNumber()); + stringBuilder.append(")"); + stringBuilder.append("\n"); + } + } + } + + public static void main(String[] args) { + String msg = "<<<<<<<<异常响应<<<<<<<<:事务流水号:na1597027822634, 执行时长:59ms, 响应数据:{\"code\":8102,\"internalMsg\":\"验证码错误\",\"msg\":\"验证码错误\"}, 异常信息:验证码错误, 堆栈信息:com.epmet.commons.tools.exception.RenException: \n" + + " at com.epmet.service.impl.VolunteerInfoServiceImpl.authenticate(VolunteerInfoServiceImpl.java:91)\n" + + " at com.epmet.service.impl.VolunteerInfoServiceImpl$$FastClassBySpringCGLIB$$7babb2e8.invoke()\n" + + " at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n" + + " at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:750)\n" + + " at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n" + + " at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:295)\n" + + " at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)\n" + + " at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n" + + " at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\n" + + " at com.epmet.service.impl.VolunteerInfoServiceImpl$$EnhancerBySpringCGLIB$$f78b4778.authenticate()\n" + + " at com.epmet.controller.ResiVolunteerController.authenticate(ResiVolunteerController.java:59)\n" + + " at com.epmet.controller.ResiVolunteerController$$FastClassBySpringCGLIB$$e023fb55.invoke()\n" + + " at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n" + + " at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:750)\n" + + " at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n" + + " at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:56)\n" + + " at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n" + + " at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)\n" + + " at com.epmet.commons.tools.aspect.BaseRequestLogAspect.proceed(BaseRequestLogAspect.java:66)\n" + + " at com.epmet.aspect.RequestLogAspect.proceed(RequestLogAspect.java:26)\n" + + " at sun.reflect.GeneratedMethodAccessor195.invoke(Unknown Source)\n" + + " at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n" + + " at java.lang.reflect.Method.invoke(Method.java:498)\n" + + " at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)\n" + + " at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)\n" + + " at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)\n" + + " at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n" + + " at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)\n" + + " at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n" + + " at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\n" + + " at com.epmet.controller.ResiVolunteerController$$EnhancerBySpringCGLIB$$1c0751c0.authenticate()\n" + + " at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n" + + " at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n" + + " at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n" + + " at java.lang.reflect.Method.invoke(Method.java:498)\n" + + " at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)\n" + + " at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)\n" + + " at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)\n" + + " at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:893)\n" + + " at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:798)\n" + + " at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n" + + " at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)\n" + + " at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)\n" + + " at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n" + + " at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n" + + " at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)\n" + + " at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n" + + " at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n" + + " at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n" + + " at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:88)\n" + + " at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n" + + " at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n" + + " at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n" + + " at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n" + + " at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n" + + " at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:94)\n" + + " at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n" + + " at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:114)\n" + + " at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:104)\n" + + " at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n" + + " at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n" + + " at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n" + + " at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n" + + " at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n" + + " at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\n" + + " at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)\n" + + " at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)\n" + + " at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n" + + " at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\n" + + " at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)\n" + + " at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)\n" + + " at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n" + + " at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)\n" + + " at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591)\n" + + " at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n" + + " at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n" + + " at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n" + + " at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n" + + " at java.lang.Thread.run(Thread.java:745)"; + + String substring = msg.substring(0, getCharacterPosition(msg, "com.epme1t", 5)); + System.out.println(substring); + } + + + public static int getCharacterPosition(String string, String findStr, int time) { + Matcher slashMatcher = null; + try { + slashMatcher = Pattern.compile(findStr).matcher(string); + int mIdx = 0; + while (slashMatcher.find()) { + mIdx++; + if (mIdx == time) { + break; + } + } + return slashMatcher.start(); + } catch (Exception e) { + logger.warn("getCharacterPosition no matche"); + return 0; + } + } + + + private String formatLongTime2Str(long timestamp) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + return dateFormat.format(timestamp); + } + + public void setActiveEnv(String activeEnv) { + this.activeEnv = activeEnv; + } + + public void setAppName(String appName) { + this.appName = appName; + } + + public void setWebHook(String webHook) { + this.webHook = webHook; + } + + public void setSecret(String secret) { + this.secret = secret; + } } diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java index 3c883ea2ac..bf7c8f1a83 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java @@ -277,4 +277,15 @@ public class RedisKeys { public static String getPointVerificationResultKey(String userId){ return rootPrefix.concat("resi:point:exchange:").concat(userId); } + + /** + * 居民端 - 志愿者认证发送验证码 epmet:smscode:regvolunteer:phone + * @param phone + * @return java.lang.String + * @Author zhangyong + * @Date 10:09 2020-08-10 + **/ + public static String getVolunteerSmsCodeKey(String phone) { + return String.format(rootPrefix+"smscode:regvolunteer:%s",phone); + } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java index 2bc11e4e43..b8f7c3e3d2 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java @@ -1,5 +1,6 @@ package com.epmet.controller; +import com.epmet.commons.tools.exception.RenException; import com.epmet.dto.AgencySubTreeDto; import com.epmet.service.StatsDemoService; import lombok.extern.slf4j.Slf4j; @@ -28,8 +29,7 @@ public class DemoController { @GetMapping("testAlarm") public void testAlarm() { //for (int i = 0; i < 20; i++) { - log.error("测试消息"); - //} + throw new RenException("测试消息长度"); } @GetMapping("testtx") diff --git a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiSendSmsCodeFormDTO.java b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiSendSmsCodeFormDTO.java new file mode 100644 index 0000000000..9ff4ad64f9 --- /dev/null +++ b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiSendSmsCodeFormDTO.java @@ -0,0 +1,26 @@ +package com.epmet.dto.form.resi; + +import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @Description 居民端-志愿者认证-短信验证码发送接口入参 + * @Author zhangyong + * @Date 2020/04/18 10:26 + */ +@Data +public class ResiSendSmsCodeFormDTO implements Serializable { + private static final long serialVersionUID = -1852541457359282018L; + /** + * 添加用户操作的用户可见异常分组 + * 该分组用于校验需要返回给前端错误信息提示的列,需要继承CustomerClientShowGroup + * 返回错误码为8999,提示信息为DTO中具体的列的校验注解message的内容 + */ + public interface AddUserShowGroup extends CustomerClientShowGroup { + } + @NotBlank(message = "手机号不能为空", groups = {AddUserShowGroup.class}) + private String mobile; +} diff --git a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiVolunteerAuthenticateFormDTO.java b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiVolunteerAuthenticateFormDTO.java index 497f36f06e..be0ea43393 100644 --- a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiVolunteerAuthenticateFormDTO.java +++ b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiVolunteerAuthenticateFormDTO.java @@ -114,4 +114,10 @@ public class ResiVolunteerAuthenticateFormDTO implements Serializable { * 志愿者签名 */ private String volunteerSignature; + + /** + * 短信验证码 + * 移动端决定是否上送验证码。 + */ + private String smsCode; } diff --git a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/resi/ResiActDetailResultDTO.java b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/resi/ResiActDetailResultDTO.java index 555ece4796..312d36843e 100644 --- a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/resi/ResiActDetailResultDTO.java +++ b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/resi/ResiActDetailResultDTO.java @@ -152,4 +152,19 @@ public class ResiActDetailResultDTO implements Serializable { * 打卡截止时间(yyyy-MM-dd HH:mm) */ private String signInEndTime; + + /** + * 活动状态(已发布/报名中:published 已取消:canceled 已结束:finished) + */ + private String actStatus; + + /** + * 活动取消的原因 + */ + private String cancelReason; + + /** + * 取消活动的时间(yyyy-MM-dd HH:mm) + */ + private String cancelTime; } diff --git a/epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-dev.yml b/epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-dev.yml index 44f6c63ac8..b9f1b64377 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-dev.yml +++ b/epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-dev.yml @@ -2,7 +2,7 @@ version: "3.7" services: epmet-heart-server: container_name: epmet-heart-server-dev - image: 192.168.1.130:10080/epmet-cloud-dev/epmet-heart-server:0.0.42 + image: 192.168.1.130:10080/epmet-cloud-dev/epmet-heart-server:0.0.46 ports: - "8111:8111" network_mode: host # 使用现有网络 @@ -14,4 +14,4 @@ services: resources: limits: cpus: '0.1' - memory: 250M \ No newline at end of file + memory: 250M diff --git a/epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-test.yml b/epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-test.yml index 05632f1c83..bd1df2562d 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-test.yml +++ b/epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-test.yml @@ -2,7 +2,7 @@ version: "3.7" services: epmet-heart-server: container_name: epmet-heart-server-test - image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/epmet-heart-server:0.0.42 + image: registry-vpc.cn-qingdao.aliyuncs.com/epmet-cloud-release/epmet-heart-server:0.0.45 ports: - "8111:8111" network_mode: host # 使用现有网络 diff --git a/epmet-module/epmet-heart/epmet-heart-server/pom.xml b/epmet-module/epmet-heart/epmet-heart-server/pom.xml index 0b24223812..da837d96d1 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/pom.xml +++ b/epmet-module/epmet-heart/epmet-heart-server/pom.xml @@ -2,7 +2,7 @@ 4.0.0 - 0.0.42 + 0.0.46 com.epmet epmet-heart diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiActListController.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiActListController.java index 684965c721..e0f41b198d 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiActListController.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiActListController.java @@ -159,7 +159,7 @@ public class ResiActListController { } /** - * 活动详情 + * 活动详情(包含已取消信息) * * @param tokenDto * @param formDto diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java index 23098cd62b..d1f471a31a 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java @@ -21,6 +21,7 @@ import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.dto.form.resi.ResiSendSmsCodeFormDTO; import com.epmet.dto.form.resi.ResiVolunteerAuthenticateFormDTO; import com.epmet.dto.result.resi.ResiVolunteerInfoResultDTO; import com.epmet.service.VolunteerInfoService; @@ -70,4 +71,19 @@ public class ResiVolunteerController { public Result selectVolunteerInfo(@LoginUser TokenDto tokenDTO){ return volunteerInfoService.selectVolunteerInfoByUserId(tokenDTO); } + + /** + * 志愿者认证 - 发送短信验证码 + * + * @param formDTO + * @return com.epmet.commons.tools.utils.Result + * @Author zhangyong + * @Date 09:47 2020-08-10 + **/ + @PostMapping(value = "sendsmscode") + public Result sendSmsCode(@RequestBody ResiSendSmsCodeFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO,ResiSendSmsCodeFormDTO.AddUserShowGroup.class); + volunteerInfoService.sendSmsCode(formDTO); + return new Result(); + } } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/WorkActUserController.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/WorkActUserController.java index 59769d69b9..5e421381a3 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/WorkActUserController.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/WorkActUserController.java @@ -25,13 +25,13 @@ public class WorkActUserController { @Autowired private WorkActUserService workActUserService; - + /** * @return com.epmet.commons.tools.utils.Result> * @param formDTO * @author yinzuomei * @description 报名审核-待审核列表 - * @Date 2020/7/21 22:24 + * @Date 2020/7/21 22:24 **/ @PostMapping("auditinglist") public Result> getAuditingList(@RequestBody ActIdFormDTO formDTO){ @@ -45,7 +45,7 @@ public class WorkActUserController { * @param formDTO * @author yinzuomei * @description 报名审核-已通过列表 - * @Date 2020/7/22 15:16 + * @Date 2020/7/22 15:16 **/ @PostMapping("passedlist") public Result> getPassedList(@RequestBody ActIdFormDTO formDTO){ @@ -58,7 +58,7 @@ public class WorkActUserController { * @param formDTO * @author yinzuomei * @description 报名审核-已拒绝列表 - * @Date 2020/7/22 15:49 + * @Date 2020/7/22 15:49 **/ @PostMapping("rejectedlist") public Result> getRejectedlist(@RequestBody ActIdFormDTO formDTO){ @@ -123,7 +123,7 @@ public class WorkActUserController { * @param formDTO * @author yinzuomei * @description 报名审核-审核通过 - * @Date 2020/7/23 17:31 + * @Date 2020/7/23 17:31 **/ @PostMapping("auditpass") public Result auditPass(@RequestBody AuditUserFormDTO formDTO){ @@ -137,7 +137,7 @@ public class WorkActUserController { * @param formDTO * @author yinzuomei * @description 报名审核-拒绝报名 - * @Date 2020/7/23 18:08 + * @Date 2020/7/23 18:08 **/ @PostMapping("auditrefuse") public Result auditrefuse(@RequestBody AuditUserFormDTO formDTO){ @@ -150,8 +150,8 @@ public class WorkActUserController { * @return com.epmet.commons.tools.utils.Result> * @param formDTO * @author yinzuomei - * @description 已结束-已参加人员列表 - * @Date 2020/7/24 10:17 + * @description 已结束-已参加人员列表(审核中、审核通过) + * @Date 2020/7/24 10:17 **/ @PostMapping("joinuserlist") public Result> queryJoinUserList(@RequestBody ActIdFormDTO formDTO){ @@ -164,7 +164,7 @@ public class WorkActUserController { * @param formDTO * @author yinzuomei * @description 已结束-已取消报名人员列表 - * @Date 2020/7/24 10:53 + * @Date 2020/7/24 10:53 **/ @PostMapping("canceleduserlist") public Result> queryCanceledUserList(@RequestBody ActIdFormDTO formDTO){ diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActInfoDao.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActInfoDao.java index 002bd3a6b3..b4fea5476a 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActInfoDao.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActInfoDao.java @@ -258,7 +258,7 @@ public interface ActInfoDao extends BaseDao { * @return java.util.List * @param actId * @author yinzuomei - * @description 已结束-已参加人员列表 + * @description 已结束-已参加人员列表(审核中、审核通过) * @Date 2020/7/24 10:18 **/ List queryJoinUserList(String actId); diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActUserRelationDao.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActUserRelationDao.java index 1322db3c83..a18f3ae5dd 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActUserRelationDao.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActUserRelationDao.java @@ -218,4 +218,13 @@ public interface ActUserRelationDao extends BaseDao { * @Date 15:59 2020-07-30 **/ String selectUserStatusByActIdAndUserId(@Param("actId") String actId, @Param("userId")String userId); + + /** + * @return java.util.List + * @param actId + * @author zhangyong + * @description 根据活动id,查询活动已报名人员,返回((已报名/待审核auditing,审核通过passed))用户id集合 + * @Date 2020/7/21 22:44 + **/ + List getSignUpUserIdList(@Param("actId") String actId); } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/ActUserRelationService.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/ActUserRelationService.java index 91ec9355da..1540926469 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/ActUserRelationService.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/ActUserRelationService.java @@ -151,4 +151,13 @@ public interface ActUserRelationService extends BaseService registration(TokenDto tokenDto, ResiActRegistrationFormDTO formDTO); + + /** + * @return java.util.List + * @param actId + * @author zhangyong + * @description 根据活动id,查询活动已报名人员,返回((已报名/待审核auditing,审核通过passed))用户id集合 + * @Date 2020/7/21 22:44 + **/ + List getSignUpUserIdList(@Param("actId") String actId); } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/VolunteerInfoService.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/VolunteerInfoService.java index 224da29b05..ede27b72a8 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/VolunteerInfoService.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/VolunteerInfoService.java @@ -22,6 +22,7 @@ import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.VolunteerInfoDTO; +import com.epmet.dto.form.resi.ResiSendSmsCodeFormDTO; import com.epmet.dto.form.resi.ResiVolunteerAuthenticateFormDTO; import com.epmet.dto.result.resi.ResiVolunteerInfoResultDTO; import com.epmet.entity.VolunteerInfoEntity; @@ -57,4 +58,14 @@ public interface VolunteerInfoService extends BaseService { * @Date 14:05 2020-07-30 **/ Result selectVolunteerInfoByUserId(TokenDto tokenDto); + + /** + * 居民端志愿者认证-发送验证码 + * + * @param formDTO + * @return void + * @Author zhangyong + * @Date 09:19 2020-08-10 + **/ + void sendSmsCode(ResiSendSmsCodeFormDTO formDTO); } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActInfoServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActInfoServiceImpl.java index f2907b33d4..0691836f68 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActInfoServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActInfoServiceImpl.java @@ -144,7 +144,7 @@ public class ActInfoServiceImpl extends BaseServiceImpl finished = baseDao.selectListActFinished(formDto); diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActUserRelationServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActUserRelationServiceImpl.java index 7b25b31eab..935a5cd8a8 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActUserRelationServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActUserRelationServiceImpl.java @@ -238,6 +238,11 @@ public class ActUserRelationServiceImpl extends BaseServiceImpl getSignUpUserIdList(String actId) { + return baseDao.getSignUpUserIdList(actId); + } + /** * 开始报名活动 * diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java index c931bbfe60..e9c52e460f 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java @@ -24,20 +24,27 @@ import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.dto.form.mq.MqBaseMsgDTO; import com.epmet.commons.tools.dto.form.mq.eventmsg.BasePointEventMsg; import com.epmet.commons.tools.enums.EventEnum; +import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.redis.RedisKeys; +import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.SendMqMsgUtils; +import com.epmet.constant.SmsTemplateConstant; import com.epmet.dao.VolunteerInfoDao; import com.epmet.dto.HeartUserInfoDTO; import com.epmet.dto.VolunteerInfoDTO; +import com.epmet.dto.form.SendVerificationCodeFormDTO; +import com.epmet.dto.form.resi.ResiSendSmsCodeFormDTO; import com.epmet.dto.form.resi.ResiVolunteerAuthenticateFormDTO; import com.epmet.dto.result.ResiUserBaseInfoResultDTO; +import com.epmet.dto.result.SendVerificationCodeResultDTO; import com.epmet.dto.result.resi.ResiVolunteerInfoResultDTO; import com.epmet.entity.VolunteerInfoEntity; +import com.epmet.feign.EpmetMessageOpenFeignClient; import com.epmet.feign.EpmetUserOpenFeignClient; -import com.epmet.redis.VolunteerInfoRedis; import com.epmet.service.HeartUserInfoService; import com.epmet.service.VolunteerInfoService; import org.apache.logging.log4j.LogManager; @@ -58,9 +65,7 @@ import java.util.List; @Service public class VolunteerInfoServiceImpl extends BaseServiceImpl implements VolunteerInfoService { private Logger logger = LogManager.getLogger(VolunteerInfoServiceImpl.class); - - @Autowired - private VolunteerInfoRedis volunteerInfoRedis; + private static final String SEND_SMS_CODE_ERROR = "发送短信验证码异常,手机号[%s],code[%s],msg[%s]"; @Autowired private EpmetUserOpenFeignClient epmetUserOpenFeignClient; @@ -68,9 +73,24 @@ public class VolunteerInfoServiceImpl extends BaseServiceImpl().ok(resultDTO); } + + @Override + public void sendSmsCode(ResiSendSmsCodeFormDTO formDTO) { + //1、发送短信验证码 + SendVerificationCodeFormDTO sendVerificationCodeFormDTO=new SendVerificationCodeFormDTO(); + sendVerificationCodeFormDTO.setMobile(formDTO.getMobile()); + sendVerificationCodeFormDTO.setAliyunTemplateCode(SmsTemplateConstant.USER_REGISTER); + Result smsCodeResult=epmetMessageOpenFeignClient.sendVerificationCode(sendVerificationCodeFormDTO); + if (!smsCodeResult.success()) { + logger.error(String.format(SEND_SMS_CODE_ERROR, formDTO.getMobile(), smsCodeResult.getCode(), smsCodeResult.getMsg())); + throw new RenException(smsCodeResult.getCode()); + } + //2、保存短信验证码(删除现有短信验证码、将新的短信验证码存入Redis) + this.saveSmsCode(formDTO, smsCodeResult.getData().getCode()); + logger.info(String.format("发送短信验证码成功,手机号[%s]", formDTO.getMobile())); + } + + /** + * 保存短信验证码(删除现有短信验证码、将新的短信验证码存入Redis) + * 过期时长为30分钟 + * + * @param sendSmsCodeFormDTO phone + * @param smsCode 验证码 + * @return void + * @Author zhangyong + * @Date 09:43 2020-08-10 + **/ + public void saveSmsCode(ResiSendSmsCodeFormDTO sendSmsCodeFormDTO, String smsCode) { + String smsCodeKey = RedisKeys.getVolunteerSmsCodeKey(sendSmsCodeFormDTO.getMobile()); + logger.info(String.format("短信验证码key=%s", smsCodeKey)); + redisUtils.set(smsCodeKey, smsCode, RedisUtils.MINUTE_THIRTY_EXPIRE); + } } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActServiceImpl.java index 4656baf0ee..740c446f37 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActServiceImpl.java @@ -147,6 +147,11 @@ public class WorkActServiceImpl implements WorkActService { //构造属性保存活动属性,活动内容 ActInfoEntity actInfoEntity=this.constructActInfo(formDTO); //校验参数 + + //校验 活动报名截止时间应该大于当前时间 + if (actInfoEntity.getSignUpEndTime().before(DateUtils.minStrToSecondDate(DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE)))){ + throw new RenException(EpmetErrorCode.ACT_SIGN_UP_END_TIME_EARLIER_NOW_EERROR.getCode(),EpmetErrorCode.ACT_SIGN_UP_END_TIME_EARLIER_NOW_EERROR.getMsg()); + } this.checkPublishFormDTO(actInfoEntity); PublishActResultDTO publishActResultDTO=new PublishActResultDTO(); //内容审核(活动标题、招募要求、活动内容图文) @@ -186,18 +191,19 @@ public class WorkActServiceImpl implements WorkActService { * @Date 2020/7/24 16:45 **/ private void checkPublishFormDTO(ActInfoEntity actInfoEntity) { + // //1、活动预计开始时间、活动预计结束时间 if(actInfoEntity.getActStartTime().compareTo(actInfoEntity.getActEndTime())!=-1){ - throw new RenException(EpmetErrorCode.ACT_START_TIME_ERROR.getCode()); + throw new RenException(EpmetErrorCode.ACT_START_TIME_ERROR.getCode(),EpmetErrorCode.ACT_START_TIME_ERROR.getMsg()); } //2、签到开始时间、签到结束时间 if(actInfoEntity.getSignInStartTime().compareTo(actInfoEntity.getSignInEndTime())!=-1){ - throw new RenException(EpmetErrorCode.ACT_SIGN_IN_START_TIME_ERROR.getCode()); + throw new RenException(EpmetErrorCode.ACT_SIGN_IN_START_TIME_ERROR.getCode(),EpmetErrorCode.ACT_SIGN_IN_START_TIME_ERROR.getMsg()); } int n=actInfoEntity.getSignUpEndTime().compareTo(actInfoEntity.getActStartTime()); //3、报名截止时间(应该在活动预计开始时间之前) if(n!=-1){ - throw new RenException((EpmetErrorCode.ACT_SIGN_UP_END_TIME_ERROR.getCode())); + throw new RenException(EpmetErrorCode.ACT_SIGN_UP_END_TIME_ERROR.getCode(),EpmetErrorCode.ACT_SIGN_UP_END_TIME_ERROR.getMsg()); } } @@ -327,7 +333,7 @@ public class WorkActServiceImpl implements WorkActService { if(result.success()&&null!=result.getData()){ actInfoEntity.setPid(result.getData().getPid()); }else{ - logger.warn("根据agencyId查询组织信息失败,agencyId=",formDTO.getSponsorId()); + logger.warn("根据agencyId查询组织信息失败,agencyId={}",formDTO.getSponsorId()); } }else{ actInfoEntity.setPid(StrConstant.EPMETY_STR); diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActUserServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActUserServiceImpl.java index 3694611f3c..879213f11a 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActUserServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActUserServiceImpl.java @@ -529,8 +529,8 @@ public class WorkActUserServiceImpl implements WorkActUserService { } List list=actInfoDao.queryJoinUserList(formDTO.getActId()); if(null!=list&&list.size()>0){ - //查询已通过审核的人员id集合 - List userIdList=actUserRelationService.getUserIdList(formDTO.getActId(), ActConstant.ACT_USER_STATUS_PASSED); + //查询已报名(审核中、审核通过)的人员id集合 + List userIdList=actUserRelationService.getSignUpUserIdList(formDTO.getActId()); //根据已通过的人员集合,查询出用户基本信息 List userInfoList=this.queryUserBaseInfoList(userIdList); for(JoinedUserResultDTO joinedUserResultDTO:list){ diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/ActInfoDao.xml b/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/ActInfoDao.xml index 8732b7c248..ea1f6501d9 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/ActInfoDao.xml +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/ActInfoDao.xml @@ -154,7 +154,7 @@ ORDER BY i.CREATED_TIME DESC - + @@ -412,7 +417,10 @@ i.SPONSOR_NAME sponsor, DATE_FORMAT(i.ACTUAL_START_TIME,'%Y-%m-%d %H:%i') actualStartTime, DATE_FORMAT(i.ACTUAL_END_TIME,'%Y-%m-%d %H:%i') actualEndTime, - IF(aur.SIGN_IN_FLAG = 'signed_in', true , false ) as isSignUp-- 是否已签到(true已签到,false未签到) + IF(aur.SIGN_IN_FLAG = 'signed_in', true , false ) as isSignUp, -- 是否已签到(true已签到,false未签到) + i.ACT_STATUS actStatus, + i.CANCEL_REASON cancelReason, + DATE_FORMAT(i.CANCEL_TIME,'%Y-%m-%d %H:%i') cancelTime FROM act_info i LEFT JOIN (SELECT count(1) signupNum, re.ACT_ID from act_user_relation re WHERE re.DEL_FLAG = '0' AND re.`STATUS` != 'refused' AND re.`STATUS` != 'canceled' GROUP BY re.ACT_ID) c ON c.ACT_ID = i.ID @@ -551,7 +559,7 @@ limit #{pageNo}, #{pageSize} - + diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/ActUserRelationDao.xml b/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/ActUserRelationDao.xml index 17fbb27e9a..f6f1e87c0d 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/ActUserRelationDao.xml +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/ActUserRelationDao.xml @@ -319,4 +319,17 @@ AND aur.USER_ID = #{userId} AND aur.ACT_ID = #{actId} + + + diff --git a/epmet-module/epmet-third/epmet-third-server/deploy/docker-compose-dev.yml b/epmet-module/epmet-third/epmet-third-server/deploy/docker-compose-dev.yml index 3b9a6b3a15..c6a1deb762 100644 --- a/epmet-module/epmet-third/epmet-third-server/deploy/docker-compose-dev.yml +++ b/epmet-module/epmet-third/epmet-third-server/deploy/docker-compose-dev.yml @@ -2,7 +2,7 @@ version: "3.7" services: epmet-third-server: container_name: epmet-third-server-dev - image: 192.168.1.130:10080/epmet-cloud-dev/epmet-third-server:0.0.108 + image: 192.168.1.130:10080/epmet-cloud-dev/epmet-third-server:0.0.117 ports: - "8110:8110" network_mode: host # 使用现有网络 diff --git a/epmet-module/epmet-third/epmet-third-server/pom.xml b/epmet-module/epmet-third/epmet-third-server/pom.xml index a16b983f97..b3f78ca43d 100644 --- a/epmet-module/epmet-third/epmet-third-server/pom.xml +++ b/epmet-module/epmet-third/epmet-third-server/pom.xml @@ -2,7 +2,7 @@ 4.0.0 - 0.0.108 + 0.0.117 com.epmet diff --git a/epmet-module/resi-group/resi-group-server/deploy/docker-compose-dev.yml b/epmet-module/resi-group/resi-group-server/deploy/docker-compose-dev.yml index e260e52f61..f4e9dddd42 100644 --- a/epmet-module/resi-group/resi-group-server/deploy/docker-compose-dev.yml +++ b/epmet-module/resi-group/resi-group-server/deploy/docker-compose-dev.yml @@ -2,7 +2,7 @@ version: "3.7" services: resi-group-server: container_name: resi-group-server-dev - image: 192.168.1.130:10080/epmet-cloud-dev/resi-group-server:0.3.62 + image: 192.168.1.130:10080/epmet-cloud-dev/resi-group-server:0.3.64 ports: - "8095:8095" network_mode: host # 使用现有网络 diff --git a/epmet-module/resi-group/resi-group-server/pom.xml b/epmet-module/resi-group/resi-group-server/pom.xml index f5a85b9ff7..1e66ca7900 100644 --- a/epmet-module/resi-group/resi-group-server/pom.xml +++ b/epmet-module/resi-group/resi-group-server/pom.xml @@ -2,7 +2,7 @@ 4.0.0 - 0.3.62 + 0.3.64 com.epmet resi-group diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/service/impl/GroupInvitationServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/service/impl/GroupInvitationServiceImpl.java index 30c1ee44ba..bb02b51d0d 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/service/impl/GroupInvitationServiceImpl.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/service/impl/GroupInvitationServiceImpl.java @@ -199,7 +199,6 @@ public class GroupInvitationServiceImpl extends BaseServiceImpl 4.0.0 - 0.3.110 + 0.3.113 com.epmet epmet-user diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBaseInfoRedis.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBaseInfoRedis.java index a2439d4dcd..918daf7435 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBaseInfoRedis.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBaseInfoRedis.java @@ -87,8 +87,17 @@ public class UserBaseInfoRedis { redisUtils.hMSet(key, map,RedisUtils.DEFAULT_EXPIRE * NumConstant.SEVEN); } - public String get(String id){ - return null; + public UserBaseInfoResultDTO get(String userId){ + + if(StringUtils.isNotBlank(userId)) { + Map map = redisUtils.hGetAll(UserRedisKeys.getResiUserKey(userId)); + if (null != map && !map.isEmpty()) { + //缓存中有数据,直接返回 + return BeanUtil.mapToBean(map, UserBaseInfoResultDTO.class, true); + } + } + return null; + } /** @@ -193,6 +202,14 @@ public class UserBaseInfoRedis { UserBaseInfoResultDTO currentCache = ConvertUtils.sourceToTarget(entity,UserBaseInfoResultDTO.class); + UserBaseInfoResultDTO orientCache = get(entity.getUserId()); + if(null != orientCache && StringUtils.isNotBlank(orientCache.getUserId())){ + //将要更改的信息赋值到原缓存中 + mergeObject(currentCache,orientCache); + //将原来的缓存对象赋值给要更新的缓存对象 + //此时orientCache中包概括要更新的属性以及之前有切不更新的属性 + currentCache = orientCache; + } RegisterRelationEntity relation = registerRelationDao.selectRegisteredGridIdByUserId(entity.getUserId()); //如果没有首次注册网格,则没有网格名称(xx机关-xx网格)、显示昵称(xx网格-x先生/女士) if(null != relation && StringUtils.isNotBlank(relation.getGridId())){ @@ -203,22 +220,24 @@ public class UserBaseInfoRedis { Result gridResult = govOrgOpenFeignClient.getGridNameByGridId(gridParam); if(gridResult.success() && null != gridResult.getData() - && StringUtils.isNotBlank(gridResult.getData().getBelongsGridName())){ + && StringUtils.isNotBlank(gridResult.getData().getBelongsGridName())) { String gridFullName = gridResult.getData().getBelongsGridName(); currentCache.setRegisteredGridName(gridFullName); - if(StringUtils.isBlank(currentCache.getGender()))currentCache.setGender(NumConstant.ZERO_STR); - StringBuffer buffer = new StringBuffer(gridFullName.split(ModuleConstant.DASH)[NumConstant.ONE]).append(ModuleConstant.DASH).append(currentCache.getSurname()); - switch (currentCache.getGender()) { - case NumConstant.ONE_STR: - buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_MALE); - break; - case NumConstant.TWO_STR: - buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_FEMALE); - break; - default: - buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_GENDER_UNKNOWN); + if (StringUtils.isBlank(currentCache.getGender())) currentCache.setGender(NumConstant.ZERO_STR); + if (StringUtils.isNotBlank(currentCache.getNickname())) { + StringBuffer buffer = new StringBuffer(gridFullName.split(ModuleConstant.DASH)[NumConstant.ONE]).append(ModuleConstant.DASH).append(currentCache.getSurname()); + switch (currentCache.getGender()) { + case NumConstant.ONE_STR: + buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_MALE); + break; + case NumConstant.TWO_STR: + buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_FEMALE); + break; + default: + buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_GENDER_UNKNOWN); + } + currentCache.setShowName(buffer.toString()); } - currentCache.setShowName(buffer.toString()); } }else{ //如果没有居民注册记录,说明当前用户是陌生人,需要从陌生人网格访问列表中查询所属的客户Id @@ -240,18 +259,7 @@ public class UserBaseInfoRedis { // } //} - Map map = redisUtils.hGetAll(UserRedisKeys.getResiUserKey(entity.getUserId())); - if(null != map && !map.isEmpty()) { - //缓存中有数据,直接返回 - UserBaseInfoResultDTO orientCache = BeanUtil.mapToBean(map, UserBaseInfoResultDTO.class, true); - mergeObject(currentCache , orientCache); - set(orientCache); - }else{ - //缓存中没有该数据 - set(currentCache); - } - - + set(currentCache); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserServiceImpl.java index 88ad2d8ce0..0a0c95d6fc 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserServiceImpl.java @@ -8,11 +8,10 @@ import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.CpUserDetailRedis; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.UserConstant; -import com.epmet.dao.UserDao; -import com.epmet.dao.UserRoleDao; -import com.epmet.dao.UserWechatDao; +import com.epmet.dao.*; import com.epmet.dto.CustomerGridDTO; import com.epmet.dto.UserDTO; +import com.epmet.dto.UserResiInfoDTO; import com.epmet.dto.UserWechatDTO; import com.epmet.dto.form.*; import com.epmet.dto.result.*; @@ -21,6 +20,7 @@ import com.epmet.entity.UserEntity; import com.epmet.entity.UserWechatEntity; import com.epmet.feign.EpmetPointOpenFeignClient; import com.epmet.feign.GovOrgFeignClient; +import com.epmet.redis.UserBaseInfoRedis; import com.epmet.service.UserBaseInfoService; import com.epmet.service.UserService; import com.epmet.util.ModuleConstant; @@ -53,6 +53,12 @@ public class UserServiceImpl extends BaseServiceImpl implem private UserBaseInfoService userBaseInfoService; @Autowired private EpmetPointOpenFeignClient epmetPointOpenFeignClient; + @Autowired + private UserBaseInfoRedis userBaseInfoRedis; + @Autowired + private UserResiInfoDao userResiInfoDao; + @Autowired + private UserBaseInfoDao userBaseInfoDao; private static final Logger log = LoggerFactory.getLogger(UserServiceImpl.class); @@ -130,7 +136,21 @@ public class UserServiceImpl extends BaseServiceImpl implem userWechatDTO.setUpdatedTime(new Date()); userWechatDTO.setUpdatedBy(wxUserInfoFormDTO.getUserId()); userWechatDao.updateByUserId(userWechatDTO); + UserBaseInfoEntity baseInfo = new UserBaseInfoEntity(); + UserBaseInfoResultDTO cache = userBaseInfoRedis.get(wxUserInfoFormDTO.getUserId()); + UserResiInfoDTO resiInfo = userResiInfoDao.selectByUserId(wxUserInfoFormDTO.getUserId()); + if(null != resiInfo && StringUtils.isNotBlank((resiInfo.getId()))) { + baseInfo.setSurname(resiInfo.getSurname()); + baseInfo.setName(resiInfo.getName()); + baseInfo.setStreet(resiInfo.getStreet()); + baseInfo.setDistrict(resiInfo.getDistrict()); + baseInfo.setBuildingAddress(resiInfo.getBuildingAddress()); + baseInfo.setMobile(resiInfo.getRegMobile()); + } + + + baseInfo.setUserId(wxUserInfoFormDTO.getUserId()); baseInfo.setNickname(wxUserInfoFormDTO.getNickName()); baseInfo.setHeadImgUrl(wxUserInfoFormDTO.getAvatarUrl());