Browse Source

Merge branches 'dev' and 'dev_thirdplatform' of http://git.elinkit.com.cn:7070/r/epmet-cloud into dev_thirdplatform

dev_shibei_match
sunyuchao 5 years ago
parent
commit
5ca1234982
  1. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  2. 421
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/filter/LogMsgSendFilter.java
  3. 11
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  4. 4
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java
  5. 26
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiSendSmsCodeFormDTO.java
  6. 6
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiVolunteerAuthenticateFormDTO.java
  7. 15
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/resi/ResiActDetailResultDTO.java
  8. 4
      epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-dev.yml
  9. 2
      epmet-module/epmet-heart/epmet-heart-server/deploy/docker-compose-test.yml
  10. 2
      epmet-module/epmet-heart/epmet-heart-server/pom.xml
  11. 2
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiActListController.java
  12. 16
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java
  13. 18
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/WorkActUserController.java
  14. 2
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActInfoDao.java
  15. 9
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActUserRelationDao.java
  16. 9
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/ActUserRelationService.java
  17. 11
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/VolunteerInfoService.java
  18. 2
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActInfoServiceImpl.java
  19. 5
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/ActUserRelationServiceImpl.java
  20. 60
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java
  21. 14
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActServiceImpl.java
  22. 4
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActUserServiceImpl.java
  23. 23
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/ActInfoDao.xml
  24. 13
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/ActUserRelationDao.xml
  25. 2
      epmet-module/epmet-third/epmet-third-server/deploy/docker-compose-dev.yml
  26. 2
      epmet-module/epmet-third/epmet-third-server/pom.xml
  27. 2
      epmet-module/resi-group/resi-group-server/deploy/docker-compose-dev.yml
  28. 2
      epmet-module/resi-group/resi-group-server/pom.xml
  29. 40
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/service/impl/GroupInvitationServiceImpl.java
  30. 2
      epmet-user/epmet-user-server/deploy/docker-compose-dev.yml
  31. 2
      epmet-user/epmet-user-server/pom.xml
  32. 62
      epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBaseInfoRedis.java
  33. 26
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserServiceImpl.java

1
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, "该机关存在下级机关,不允许删除"),

421
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(<generated>)\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(<generated>)\n" +
" at com.epmet.controller.ResiVolunteerController.authenticate(ResiVolunteerController.java:59)\n" +
" at com.epmet.controller.ResiVolunteerController$$FastClassBySpringCGLIB$$e023fb55.invoke(<generated>)\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(<generated>)\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;
}
}

11
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);
}
}

4
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")

26
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;
}

6
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;
}

15
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;
}

4
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
memory: 250M

2
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 # 使用现有网络

2
epmet-module/epmet-heart/epmet-heart-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.0.42</version>
<version>0.0.46</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>epmet-heart</artifactId>

2
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

16
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<ResiVolunteerInfoResultDTO> 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();
}
}

18
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<java.util.List<com.epmet.dto.result.work.AuditingActUserResultDTO>>
* @param formDTO
* @author yinzuomei
* @description 报名审核-待审核列表
* @Date 2020/7/21 22:24
* @Date 2020/7/21 22:24
**/
@PostMapping("auditinglist")
public Result<List<AuditingActUserResultDTO>> 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<List<PassedActUserResultDTO>> 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<List<RejectedActUserResultDTO>> 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<java.util.List<com.epmet.dto.result.work.JoinedUserResultDTO>>
* @param formDTO
* @author yinzuomei
* @description 已结束-已参加人员列表
* @Date 2020/7/24 10:17
* @description 已结束-已参加人员列表(审核中审核通过)
* @Date 2020/7/24 10:17
**/
@PostMapping("joinuserlist")
public Result<List<JoinedUserResultDTO>> 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<List<CanceledUserResultDTO>> queryCanceledUserList(@RequestBody ActIdFormDTO formDTO){

2
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActInfoDao.java

@ -258,7 +258,7 @@ public interface ActInfoDao extends BaseDao<ActInfoEntity> {
* @return java.util.List<com.epmet.dto.result.work.JoinedUserResultDTO>
* @param actId
* @author yinzuomei
* @description 已结束-已参加人员列表
* @description 已结束-已参加人员列表(审核中审核通过)
* @Date 2020/7/24 10:18
**/
List<JoinedUserResultDTO> queryJoinUserList(String actId);

9
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/dao/ActUserRelationDao.java

@ -218,4 +218,13 @@ public interface ActUserRelationDao extends BaseDao<ActUserRelationEntity> {
* @Date 15:59 2020-07-30
**/
String selectUserStatusByActIdAndUserId(@Param("actId") String actId, @Param("userId")String userId);
/**
* @return java.util.List<java.lang.String>
* @param actId
* @author zhangyong
* @description 根据活动id查询活动已报名人员,返回(已报名/待审核auditing审核通过passed)用户id集合
* @Date 2020/7/21 22:44
**/
List<String> getSignUpUserIdList(@Param("actId") String actId);
}

9
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/ActUserRelationService.java

@ -151,4 +151,13 @@ public interface ActUserRelationService extends BaseService<ActUserRelationEntit
* @Date 17:14 2020-07-30
**/
Result<ResiActRegistrationResultDTO> registration(TokenDto tokenDto, ResiActRegistrationFormDTO formDTO);
/**
* @return java.util.List<java.lang.String>
* @param actId
* @author zhangyong
* @description 根据活动id查询活动已报名人员,返回(已报名/待审核auditing审核通过passed)用户id集合
* @Date 2020/7/21 22:44
**/
List<String> getSignUpUserIdList(@Param("actId") String actId);
}

11
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<VolunteerInfoEntity> {
* @Date 14:05 2020-07-30
**/
Result<ResiVolunteerInfoResultDTO> selectVolunteerInfoByUserId(TokenDto tokenDto);
/**
* 居民端志愿者认证-发送验证码
*
* @param formDTO
* @return void
* @Author zhangyong
* @Date 09:19 2020-08-10
**/
void sendSmsCode(ResiSendSmsCodeFormDTO formDTO);
}

2
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<ActInfoDao, ActInfoEntit
list.addAll(inProgress);
}
// 查询活动状态是:已结束 finished
// 查询活动状态是:已结束 finished 已取消 canceled
int pageIndex = (formDto.getPageNo() - NumConstant.ONE) * formDto.getPageSize();
formDto.setPageNo(pageIndex);
List<ResiActInfoResultDTO> finished = baseDao.selectListActFinished(formDto);

5
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<ActUserRelationD
return new Result();
}
@Override
public List<String> getSignUpUserIdList(String actId) {
return baseDao.getSignUpUserIdList(actId);
}
/**
* 开始报名活动
*

60
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<VolunteerInfoDao, VolunteerInfoEntity> 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<VolunteerInfoDao,
@Autowired
private HeartUserInfoService heartUserInfoService;
@Autowired
private RedisUtils redisUtils;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Override
@Transactional(rollbackFor = Exception.class)
public Result authenticate(TokenDto tokenDto, ResiVolunteerAuthenticateFormDTO formDTO) {
// 验证码校验
if (null != formDTO.getSmsCode()){
String smsCodeKey = RedisKeys.getVolunteerSmsCodeKey(formDTO.getMobile());
String rightSmsCode = (String) redisUtils.get(smsCodeKey);
if (!formDTO.getSmsCode().equals(rightSmsCode)) {
logger.error(String.format("验证码错误code[%s],msg[%s]", EpmetErrorCode.MOBILE_CODE_ERROR.getCode(), EpmetErrorCode.MOBILE_CODE_ERROR.getMsg()));
throw new RenException(EpmetErrorCode.MOBILE_CODE_ERROR.getCode());
}
}
formDTO.setUserId(tokenDto.getUserId());
// 检查是否是志愿者
Integer volunteerFlag = baseDao.queryVolunteerFlagByUserId(tokenDto.getUserId());
@ -138,4 +158,36 @@ public class VolunteerInfoServiceImpl extends BaseServiceImpl<VolunteerInfoDao,
}
return new Result<ResiVolunteerInfoResultDTO>().ok(resultDTO);
}
@Override
public void sendSmsCode(ResiSendSmsCodeFormDTO formDTO) {
//1、发送短信验证码
SendVerificationCodeFormDTO sendVerificationCodeFormDTO=new SendVerificationCodeFormDTO();
sendVerificationCodeFormDTO.setMobile(formDTO.getMobile());
sendVerificationCodeFormDTO.setAliyunTemplateCode(SmsTemplateConstant.USER_REGISTER);
Result<SendVerificationCodeResultDTO> 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);
}
}

14
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);

4
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<JoinedUserResultDTO> list=actInfoDao.queryJoinUserList(formDTO.getActId());
if(null!=list&&list.size()>0){
//查询已通过审核的人员id集合
List<String> userIdList=actUserRelationService.getUserIdList(formDTO.getActId(), ActConstant.ACT_USER_STATUS_PASSED);
//查询已报名(审核中、审核通过)的人员id集合
List<String> userIdList=actUserRelationService.getSignUpUserIdList(formDTO.getActId());
//根据已通过的人员集合,查询出用户基本信息
List<UserBaseInfoResultDTO> userInfoList=this.queryUserBaseInfoList(userIdList);
for(JoinedUserResultDTO joinedUserResultDTO:list){

23
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/ActInfoDao.xml

@ -154,7 +154,7 @@
ORDER BY i.CREATED_TIME DESC
</select>
<!--活动列表 - (活动结束时间 < 当前时间),已结束-->
<!--活动列表 - 已结束、已取消-->
<select id="selectListActFinished" parameterType="com.epmet.dto.form.resi.ResiActBaseFormDTO"
resultType="com.epmet.dto.result.resi.ResiActInfoResultDTO">
SELECT
@ -167,15 +167,20 @@
i.ACT_QUOTA_CATEGORY actQuotaCategory, -- 活动名额类型(true:固定名额(1) false: 不限制名额(0))
i.ACT_QUOTA actQuota,
IFNULL(c.signupNum, 0) signupNum, -- 已报名人数
'finished' AS actCurrentState, -- 活动状态:已结束
case
when i.ACT_STATUS = 'finished'
then 'finished'
when i.ACT_STATUS = 'canceled'
then 'canceled'
end as actCurrentState, -- 活动状态:已结束、已取消
IF(u.USER_ID = #{userId},'signed_up','no_signed_up') as signupFlag
FROM act_info i
LEFT JOIN act_user_relation u ON i.ID = u.ACT_ID AND U.DEL_FLAG = '0' AND u.`STATUS` != 'refused' AND u.`STATUS` != 'canceled' AND u.USER_ID = #{userId}
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
WHERE i.DEL_FLAG = '0'
AND i.ACT_STATUS = 'finished'
AND i.ACT_STATUS != 'published'
AND i.CUSTOMER_ID = #{customerId}
ORDER BY i.CREATED_TIME DESC
ORDER BY i.ACT_STATUS DESC, i.CREATED_TIME DESC
LIMIT #{pageNo}, #{pageSize}
</select>
@ -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}
</select>
<!-- 已结束-参加人员列表 -->
<!-- 已结束-报名人员列表(审核中、审核通过) -->
<select id="queryJoinUserList" parameterType="java.lang.String" resultType="com.epmet.dto.result.work.JoinedUserResultDTO">
SELECT
aur.id as actUserRelationId,
@ -572,7 +580,8 @@
and ai.DEL_FLAG='0')
WHERE
aur.DEL_FLAG = '0'
AND aur.`STATUS` = 'passed'
AND aur.`STATUS` != 'refused'
AND aur.`STATUS` != 'canceled'
AND aur.ACT_ID =#{actId}
order by aur.CREATED_TIME asc
</select>

13
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}
</select>
<!-- 根据活动id,当前状态(已报名/待审核auditing,审核通过passed)返回用户id集合 -->
<select id="getSignUpUserIdList" parameterType="java.lang.String" resultType="java.lang.String">
SELECT
distinct aur.USER_ID as userIds
FROM
act_user_relation aur
WHERE
aur.DEL_FLAG = '0'
AND ( aur.STATUS = 'auditing' OR aur.`STATUS` = 'passed' )
AND aur.ACT_ID = #{actId}
order by aur.CREATED_TIME desc
</select>
</mapper>

2
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 # 使用现有网络

2
epmet-module/epmet-third/epmet-third-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.0.108</version>
<version>0.0.117</version>
<parent>
<groupId>com.epmet</groupId>

2
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 # 使用现有网络

2
epmet-module/resi-group/resi-group-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.62</version>
<version>0.3.64</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>resi-group</artifactId>

40
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<GroupInvitationD
**/
@Override
public LinkGroupInfoResultDTO getLinkGroupInfo(LinkGroupInfoFormDTO formDTO) {
logger.info(String.format("用户点击群邀请链接,入参%s",JSON.toJSONString(formDTO)));
//0、校验是否存在该邀请连接(判断是会否被删除连接、是否失效、群状态)
GroupInvitationDTO groupInvitationDTO=this.checkLinkValid(formDTO.getInvitationId());
LinkGroupInfoResultDTO linkGroupInfoResultDTO = new LinkGroupInfoResultDTO();
@ -219,14 +218,11 @@ public class GroupInvitationServiceImpl extends BaseServiceImpl<GroupInvitationD
if (groupLeaderUserInfo.success() && null != groupLeaderUserInfo.getData()) {
groupInfo.setLeaderName(groupLeaderUserInfo.getData().getShowName());
} else {
logger.error(String.format("居民端用户【%s】根据链接【%s】查看群邀请信息调用epmet-user-server服务,获取组长信息异常,返参%s",
formDTO.getUserId(),
formDTO.getInvitationId(),
JSON.toJSONString(groupLeaderUserInfo)));
groupInfo.setLeaderName("");
logger.warn("查看群邀请信息调用epmet-user-server服务,获取组长信息异常");
groupInfo.setLeaderName(StrConstant.EPMETY_STR);
}
}else{
logger.error(String.format("根据群邀请连接查询群基本信息异常,groupInfo is null,selectLinkGroupInfo入参groupId=%s",groupInvitationDTO.getResiGroupId()));
logger.warn("根据群邀请连接查询群基本信息异常,groupInfo is null,selectLinkGroupInfo入参groupId="+groupInvitationDTO.getResiGroupId());
linkGroupInfoResultDTO.setGroupInfo(new LinkGroupInfoDTO());
}
//4、记录用户邀请关系
@ -321,7 +317,13 @@ public class GroupInvitationServiceImpl extends BaseServiceImpl<GroupInvitationD
public void accetInvitation(AccetInvitationFormDTO formDTO) {
//1、申请是否有效
GroupInvitationDTO groupInvitationDTO=this.checkLinkValid(formDTO.getInvitationId());
//2、进入小组所在的网格
//2、查询是否在群内
ResiGroupMemberDTO groupMember = resiGroupMemberDao.selectGroupMemberInfo(groupInvitationDTO.getResiGroupId(), formDTO.getUserId());
if (null != groupMember && !MemberStateConstant.REMOVED.equals(groupMember.getStatus())) {
logger.info("已经在群内,直接返回成功");
return;
}
//3、进入小组所在的网格
ResiGroupDTO resiGroupDTO = resiGroupService.get(groupInvitationDTO.getResiGroupId());
if(null==resiGroupDTO){
logger.error(String.format("用户同意邀请进组,查询组信息失败。入参:userId【%s】、invitationId【%s】、groupId【%s】。",formDTO.getUserId(),formDTO.getInvitationId(),groupInvitationDTO.getResiGroupId()));
@ -339,25 +341,13 @@ public class GroupInvitationServiceImpl extends BaseServiceImpl<GroupInvitationD
logger.error(String.format("用户同意邀请进组,进入网格失败。当前接口返回8000,调用enterGrid接口返回", result.toString()));
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
}
//3、校验是否已经注册居民
//4、校验是否已经注册居民
if(null==result.getData().getUserRoleList()||result.getData().getUserRoleList().size()==0){
logger.error(String.format("用户同意邀请进组失败,返回角色列表为空错误编码%s,错误提示%s",EpmetErrorCode.CANNOT_JOIN_GROUP.getCode(),EpmetErrorCode.CANNOT_JOIN_GROUP.getMsg()));
throw new RenException(EpmetErrorCode.CANNOT_JOIN_GROUP.getCode());
}
UserRoleDTO userRoleDTO=this.getUserRoleDTO(result.getData().getUserRoleList());
/*UserRoleDTO userRoleDTO=new UserRoleDTO();
if (null != resiGroupDTO) {
//获取当前用户所有角色
userRoleDTO = resiGroupService.checkPartyMemberOrWarmHeated(formDTO.getApp(),
formDTO.getUserId(),
resiGroupDTO.getCustomerId(),
resiGroupDTO.getGridId());
if (NumConstant.ZERO_STR.equals(userRoleDTO.getRegisteredResiFlag())) {
logger.error(String.format("居民端用户【%s】同意邀请进组失败,错误码:%s,错误提示:%s",formDTO.getUserId(),EpmetErrorCode.CANNOT_JOIN_GROUP.getCode(),EpmetErrorCode.CANNOT_JOIN_GROUP.getMsg()));
throw new RenException(EpmetErrorCode.CANNOT_JOIN_GROUP.getCode());
}
}*/
//3、新增一条邀请入群、直接审核通过的入群记录
//5、新增一条邀请入群、直接审核通过的入群记录
GroupMemeberOperationDTO groupMemeberOperation = new GroupMemeberOperationDTO();
groupMemeberOperation.setGroupId(resiGroupDTO.getId());
groupMemeberOperation.setCustomerUserId(formDTO.getUserId());
@ -365,7 +355,7 @@ public class GroupInvitationServiceImpl extends BaseServiceImpl<GroupInvitationD
groupMemeberOperation.setEnterGroupType(EnterGroupTypeConstant.INVITED);
groupMemeberOperation.setOperateUserId(formDTO.getUserId());
groupMemeberOperationService.accetInvitation(groupMemeberOperation);
//4、直接加入群成员关系表
//6、直接加入群成员关系表
//如果是之前被移除的,则修改resi_group_member记录
ResiGroupMemberDTO resiGroupMemberDTO = new ResiGroupMemberDTO();
ResiGroupMemberDTO resiGroupMember = resiGroupMemberDao.selectGroupMemberInfo(groupInvitationDTO.getResiGroupId(), formDTO.getUserId());
@ -379,7 +369,7 @@ public class GroupInvitationServiceImpl extends BaseServiceImpl<GroupInvitationD
resiGroupMemberDTO.setStatus(MemberStateConstant.APPROVED);
resiGroupMemberDTO.setCreatedBy(groupMemeberOperation.getCustomerUserId());
resiGroupMemberService.saveOrUpdate(resiGroupMemberDTO);
//5、修改群统计值
//7、修改群统计值
resiGroupMemberDao.updateResiGroupStatistical(groupMemeberOperation.getGroupId(), userRoleDTO);
ResiGroupInfoRedisDTO groupCache =
resiGroupRedis.get(groupInvitationDTO.getResiGroupId());
@ -398,7 +388,7 @@ public class GroupInvitationServiceImpl extends BaseServiceImpl<GroupInvitationD
);
resiGroupRedis.set(groupCache);
}
//6、发送消息
//8、发送消息
this.sendMessageToLeader(formDTO, resiGroupDTO,groupInvitationDTO);
}

2
epmet-user/epmet-user-server/deploy/docker-compose-dev.yml

@ -2,7 +2,7 @@ version: "3.7"
services:
epmet-user-server:
container_name: epmet-user-server-dev
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-user-server:0.3.110
image: 192.168.1.130:10080/epmet-cloud-dev/epmet-user-server:0.3.113
ports:
- "8087:8087"
network_mode: host # 不会创建新的网络

2
epmet-user/epmet-user-server/pom.xml

@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>0.3.110</version>
<version>0.3.113</version>
<parent>
<groupId>com.epmet</groupId>
<artifactId>epmet-user</artifactId>

62
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<String, Object> 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<BelongGridNameResultDTO> 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<String,Object> 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);
}

26
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<UserDao, UserEntity> 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<UserDao, UserEntity> 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());

Loading…
Cancel
Save