diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/AccessTokenDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/AccessTokenDTO.java
new file mode 100644
index 0000000000..dac9be670e
--- /dev/null
+++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/AccessTokenDTO.java
@@ -0,0 +1,19 @@
+package com.epmet.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @description:
+ * @author: liushaowen
+ * @date: 2020/11/17 10:07
+ */
+@Data
+public class AccessTokenDTO implements Serializable {
+ private String resiToken;
+
+ private String workToken;
+
+ private String errMsg;
+}
diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/utils/ThirdUtils.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/utils/ThirdUtils.java
new file mode 100644
index 0000000000..426bab2b82
--- /dev/null
+++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/utils/ThirdUtils.java
@@ -0,0 +1,53 @@
+package com.epmet.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.epmet.commons.tools.enums.EnvEnum;
+import com.epmet.commons.tools.utils.ConvertUtils;
+import com.epmet.commons.tools.utils.HttpClientManager;
+import com.epmet.commons.tools.utils.Result;
+import com.epmet.dto.AccessTokenDTO;
+import com.epmet.dto.result.CustomerTokensResultDTO;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description:
+ * @author: liushaowen
+ * @date: 2020/11/17 10:04
+ */
+
+public class ThirdUtils {
+ /**
+ * @Description 获取AccessToken公共方法
+ * @param customerId
+ * @return com.epmet.dto.AccessTokenDTO
+ * @Author liushaowen
+ * @Date 2020/11/17 10:09
+ */
+ public static AccessTokenDTO getAccessToken(String customerId) {
+ EnvEnum envEnum = EnvEnum.getCurrentEnv();
+ AccessTokenDTO accessToken = new AccessTokenDTO();
+
+ String url = "https://epmet-cloud.elinkservice.cn/api/third/pacustomer/tokenlist";
+ JSONObject postData = new JSONObject();
+ postData.put("customerId", customerId);
+ String data = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(postData)).getData();
+ JSONObject toResult = JSON.parseObject(data);
+ Result mapToResult = ConvertUtils.mapToEntity(toResult, Result.class);
+ if (null != toResult.get("code")) {
+ mapToResult.setCode(((Integer) toResult.get("code")).intValue());
+ }
+ if (!mapToResult.success()) {
+ accessToken.setErrMsg( StringUtils.isBlank(mapToResult.getMsg()) ? mapToResult.getInternalMsg() : mapToResult.getMsg());
+ }
+ Object CustomerTokensResultDTO = mapToResult.getData();
+ JSONObject json = JSON.parseObject(CustomerTokensResultDTO.toString());
+ CustomerTokensResultDTO customerTokensResultDTO = ConvertUtils.mapToEntity(json, com.epmet.dto.result.CustomerTokensResultDTO.class);
+ accessToken.setResiToken(customerTokensResultDTO.getResiAuthorizerToken());
+ accessToken.setWorkToken(customerTokensResultDTO.getWorkAuthorizerToken());
+ return accessToken;
+ }
+}
diff --git a/epmet-module/resi-group/resi-group-server/pom.xml b/epmet-module/resi-group/resi-group-server/pom.xml
index 8d7f6c1173..1489a642ca 100644
--- a/epmet-module/resi-group/resi-group-server/pom.xml
+++ b/epmet-module/resi-group/resi-group-server/pom.xml
@@ -160,6 +160,11 @@
false
https://epmet-dev.elinkservice.cn/api/epmetscan/api
+
+ 5
+ 8
+ 10
+ 30
@@ -193,6 +198,11 @@
false
https://epmet-dev.elinkservice.cn/api/epmetscan/api
+
+ 5
+ 8
+ 10
+ 30
@@ -225,6 +235,11 @@
true
https://epmet-dev.elinkservice.cn/api/epmetscan/api
+
+ 5
+ 8
+ 10
+ 30
@@ -254,6 +269,11 @@
true
https://epmet-open.elinkservice.cn/api/epmetscan/api
+
+ 5
+ 8
+ 10
+ 30
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/config/AsyncConfig.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/config/AsyncConfig.java
new file mode 100644
index 0000000000..8a1a958939
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/config/AsyncConfig.java
@@ -0,0 +1,49 @@
+package com.epmet.config;
+
+import com.epmet.properties.ThreadProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * 线程池配置类
+ */
+@Configuration
+@EnableConfigurationProperties(ThreadProperties.class)
+@EnableAsync
+public class AsyncConfig {
+
+ @Autowired
+ private ThreadProperties threadProperties;
+
+ @Bean
+ public Executor executor() {
+ ThreadProperties.ThreadPoolProperties threadPoolProps = threadProperties.getThreadPool();
+
+ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+ executor.setCorePoolSize(threadPoolProps.getCorePoolSize());
+ executor.setMaxPoolSize(threadPoolProps.getMaxPoolSize());
+ executor.setQueueCapacity(threadPoolProps.getQueueCapacity());
+ executor.setThreadNamePrefix("epmet-resi-group-");
+ // rejection-policy:当pool已经达到max size的时候,如何处理新任务
+ // CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
+ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //对拒绝task的处理策略
+ executor.setKeepAliveSeconds(threadPoolProps.getKeepAlive());
+ executor.initialize();
+ return executor;
+ }
+
+ @Bean
+ public ExecutorService executorService() {
+ ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) executor();
+ return executor.getThreadPoolExecutor();
+ }
+
+}
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupCodeController.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupCodeController.java
index 6f6430f358..34b4458ea8 100644
--- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupCodeController.java
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupCodeController.java
@@ -89,7 +89,7 @@ public class ResiGroupCodeController {
@RequestMapping("creategroupcode")
public Result createGroupCode(@RequestBody CreateGroupCodeFormDTO dto){
ValidatorUtils.validateEntity(dto);
- return new Result().ok(resiGroupCodeService.createGroupCode(dto));
+ return new Result().ok(resiGroupCodeService.createGroupCode(dto, true));
}
@RequestMapping("getgroupcode")
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupCodeService.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupCodeService.java
index de9a3a1505..e0b5e7ec4d 100644
--- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupCodeService.java
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupCodeService.java
@@ -101,12 +101,12 @@ public interface ResiGroupCodeService extends BaseService {
/**
* @Description 创建群组二维码
- * @param dto
+ * @param dto,syncFlag(是否同步执行,true同步,false异步)
* @return String
* @Author liushaowen
* @Date 2020/11/13 16:32
*/
- String createGroupCode(CreateGroupCodeFormDTO dto);
+ String createGroupCode(CreateGroupCodeFormDTO dto, boolean syncFlag);
/**
* @Description 获取群组二维码
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupCodeServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupCodeServiceImpl.java
index a09b756ca6..d989b3a379 100644
--- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupCodeServiceImpl.java
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupCodeServiceImpl.java
@@ -25,6 +25,7 @@ import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.enums.EnvEnum;
+import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
@@ -48,6 +49,7 @@ import com.epmet.resi.group.dto.group.form.CreateGroupCodeFormDTO;
import com.epmet.resi.group.dto.group.form.GetGroupCodeFormDTO;
import com.epmet.resi.group.dto.group.form.GroupCodeBasicInfoFormDTO;
import com.epmet.resi.group.dto.group.result.GroupCodeBasicInfoResultDTO;
+import com.epmet.utils.ThirdUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -58,6 +60,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.UnsupportedEncodingException;
import java.util.*;
+import java.util.concurrent.ExecutorService;
/**
* 小组二维码 小组唯一二维码,海报码和小组码是同一个二维码,长期有效的
@@ -76,6 +79,9 @@ public class ResiGroupCodeServiceImpl extends BaseServiceImpl page(Map params) {
IPage page = baseDao.selectPage(
@@ -129,14 +135,68 @@ public class ResiGroupCodeServiceImpl extends BaseServiceImpl{
+ try {
+ long startTs = System.currentTimeMillis();
+ createCodeFunction(dto);
+ long endTs = System.currentTimeMillis();
+ logger.info("异步创建群二维码成功,执行时长:{}", endTs - startTs);
+ } catch (Exception e) {
+ logger.error("异步创建群二维码失败,错误信息:{}", ExceptionUtils.getErrorStackTrace(e));
+ }
+ });
+ return "";
+ }
+ }
+
+ /**
+ * @param dto
+ * @return com.epmet.commons.tools.utils.Result
+ * @Description 获取群组二维码
+ * @Author liushaowen
+ * @Date 2020/11/16 9:37
+ */
+ @Override
+ public Result getGroupCode(GetGroupCodeFormDTO dto) {
+ ResiGroupCodeEntity codeByGroupId = getCode(dto.getGroupId(), dto.getType());
+ if (codeByGroupId != null) {
+ //数据库有数据
+ return new Result().ok(codeByGroupId.getUrl());
+ } else {
+ //从微信获取二维码并存储
+ CreateGroupCodeFormDTO createDto = new CreateGroupCodeFormDTO();
+ BeanUtils.copyProperties(dto, createDto);
+ String url = createGroupCode(createDto, false);
+ if (StringUtils.isBlank(url)){
+ throw new RenException("获取二维码失败");
+ }
+ return new Result().ok(url);
+ }
+ }
+
+ private ResiGroupCodeEntity getCode(String groupId, String type) {
+ if (StringUtils.isBlank(groupId) || StringUtils.isBlank(type)) {
+ throw new RenException("获取二维码失败,groupId或type为空");
+ }
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("DEL_FLAG", "0");
+ queryWrapper.eq("GROUP_ID", groupId);
+ queryWrapper.eq("TYPE", type);
+ return baseDao.selectOne(queryWrapper);
+ }
+
+ private String createCodeFunction(CreateGroupCodeFormDTO dto){
String result = "";
ResiGroupCodeEntity codeByGroupId = getCode(dto.getGroupId(), dto.getType());
if (codeByGroupId != null) {
@@ -146,7 +206,7 @@ public class ResiGroupCodeServiceImpl extends BaseServiceImpl
- * @Description 获取群组二维码
- * @Author liushaowen
- * @Date 2020/11/16 9:37
- */
- @Override
- public Result getGroupCode(GetGroupCodeFormDTO dto) {
- ResiGroupCodeEntity codeByGroupId = getCode(dto.getGroupId(), dto.getType());
- if (codeByGroupId != null) {
- //数据库有数据
- return new Result().ok(codeByGroupId.getUrl());
- } else {
- //从微信获取二维码并存储
- CreateGroupCodeFormDTO createDto = new CreateGroupCodeFormDTO();
- BeanUtils.copyProperties(dto, createDto);
- String url = createGroupCode(createDto);
- if (StringUtils.isBlank(url)){
- throw new RenException("获取二维码失败");
- }
- return new Result().ok(url);
- }
- }
-
- private ResiGroupCodeEntity getCode(String groupId, String type) {
- if (StringUtils.isBlank(groupId) || StringUtils.isBlank(type)) {
- throw new RenException("获取二维码失败,groupId或type为空");
- }
- QueryWrapper queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("DEL_FLAG", "0");
- queryWrapper.eq("GROUP_ID", groupId);
- queryWrapper.eq("TYPE", type);
- return baseDao.selectOne(queryWrapper);
- }
-
- //获取AccessToken
- private String getAccessToken(String customerId) {
- EnvEnum envEnum = EnvEnum.getCurrentEnv();
- String resiAccessToken = null;
- if (EnvEnum.PROD.getCode().equals(envEnum.getCode())) {
- //居民端
- StringBuilder resiKey = new StringBuilder(customerId).append(":resi");
- Map authorizerRefreshToken = new HashMap<>();
- authorizerRefreshToken = resiGroupCodeRedis.getAuthorizerRefreshToken(resiKey.toString());
- resiAccessToken = (String) authorizerRefreshToken.get("authorizerAccessToken");
- } else {
- String url = "https://epmet-cloud.elinkservice.cn/api/third/pacustomer/tokenlist";
- JSONObject postData = new JSONObject();
- postData.put("customerId", customerId);
- String data = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(postData)).getData();
- JSONObject toResult = JSON.parseObject(data);
- Result mapToResult = ConvertUtils.mapToEntity(toResult, Result.class);
- if (null != toResult.get("code")) {
- mapToResult.setCode(((Integer) toResult.get("code")).intValue());
- }
- Object CustomerTokensResultDTO = mapToResult.getData();
- JSONObject json = JSON.parseObject(CustomerTokensResultDTO.toString());
- CustomerTokensResultDTO customerTokensResultDTO = ConvertUtils.mapToEntity(json, com.epmet.dto.result.CustomerTokensResultDTO.class);
- resiAccessToken = customerTokensResultDTO.getResiAuthorizerToken();
- }
- return resiAccessToken;
- }
-
/**
* @param formDTO
* @Description 获取生成海报(小组码)信息
@@ -272,7 +268,7 @@ public class ResiGroupCodeServiceImpl extends BaseServiceImpl