diff --git a/epmet-module/epmet-point/epmet-point-server/pom.xml b/epmet-module/epmet-point/epmet-point-server/pom.xml
index 19dad360dd..1b9ea82526 100644
--- a/epmet-module/epmet-point/epmet-point-server/pom.xml
+++ b/epmet-module/epmet-point/epmet-point-server/pom.xml
@@ -140,6 +140,12 @@
false
+
+
+ 5
+ 8
+ 10
+ 30
https://oapi.dingtalk.com/robot/send?access_token=90782b119f82a5b6bb8e0f819b6a77bbc2102b53aa2d7d2e24fa10b66d580b1c
SEC080aac67ff78e79fdaba132aa51e3fb3f6060dec99492feaac82cabf9f8b6a19
@@ -175,6 +181,12 @@
false
+
+
+ 5
+ 8
+ 10
+ 30
https://oapi.dingtalk.com/robot/send?access_token=90782b119f82a5b6bb8e0f819b6a77bbc2102b53aa2d7d2e24fa10b66d580b1c
SEC080aac67ff78e79fdaba132aa51e3fb3f6060dec99492feaac82cabf9f8b6a19
@@ -210,6 +222,12 @@
true
+
+
+ 5
+ 8
+ 10
+ 30
https://oapi.dingtalk.com/robot/send?access_token=90782b119f82a5b6bb8e0f819b6a77bbc2102b53aa2d7d2e24fa10b66d580b1c
SEC080aac67ff78e79fdaba132aa51e3fb3f6060dec99492feaac82cabf9f8b6a19
@@ -245,6 +263,12 @@
true
+
+
+ 5
+ 8
+ 10
+ 30
https://oapi.dingtalk.com/robot/send?access_token=a5f66c3374b1642fe2142dbf56d5997e280172d4e8f2b546c9423a68c82ece6c
SEC95f4f40b533ad379ea6a6d1af6dd37029383cfe1b7cd96dfac2678be2c1c3ed1
diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/config/AsyncConfig.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/config/AsyncConfig.java
new file mode 100644
index 0000000000..2573cbd4ab
--- /dev/null
+++ b/epmet-module/epmet-point/epmet-point-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-point-");
+ // 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/epmet-point/epmet-point-server/src/main/java/com/epmet/properties/ThreadProperties.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/properties/ThreadProperties.java
new file mode 100644
index 0000000000..aaec7cb719
--- /dev/null
+++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/properties/ThreadProperties.java
@@ -0,0 +1,25 @@
+package com.epmet.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * 线程池属性类
+ */
+@ConfigurationProperties(prefix = "thread")
+@Data
+public class ThreadProperties {
+
+ private ThreadPoolProperties threadPool;
+
+ @Data
+ public static class ThreadPoolProperties {
+ private int corePoolSize;
+ private int maxPoolSize;
+ private int queueCapacity;
+ private int keepAlive;
+
+ public ThreadPoolProperties() {
+ }
+ }
+}
diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointRuleServiceImpl.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointRuleServiceImpl.java
index 538615aaf0..8665b1921a 100644
--- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointRuleServiceImpl.java
+++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/PointRuleServiceImpl.java
@@ -25,10 +25,12 @@ import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.enums.CommonOperateTypeEnum;
+import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
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.SpringContextUtils;
import com.epmet.dao.PointRuleDao;
import com.epmet.dao.PointRuleDefaultDao;
import com.epmet.dao.RuleOperateLogDao;
@@ -57,9 +59,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
/**
@@ -194,6 +195,7 @@ public class PointRuleServiceImpl extends BaseServiceImpl> customerListResult = operCrmOpenFeignClient.getAllCustomerList();
log.info("initPointRule operCrmOpenFeignClient.getAllCustomerList result:{}",JSON.toJSONString(customerListResult));
@@ -206,11 +208,42 @@ public class PointRuleServiceImpl extends BaseServiceImpl insertList = new ArrayList<>();
+ List defaultEventCodeList = ruleDefaultEntities.stream().map(PointRuleDefaultEntity :: getEventCode).distinct().collect(Collectors.toList());
+ List customerRule = baseDao.selectList(null);
+ if(!CollectionUtils.isEmpty(customerRule)){
+ Map> customerRuleMap =
+ customerRule.stream().collect(Collectors.groupingBy(PointRuleEntity :: getCustomerId));
+ customerRuleMap.forEach((customerId,ruleList) -> {
+ if(null != ruleList){
+ List event = new LinkedList<>(defaultEventCodeList);
+ //取差集
+ event.removeAll(ruleList.stream().map(PointRuleEntity :: getEventCode).distinct().collect(Collectors.toList()));
+ if(!CollectionUtils.isEmpty(event)){
+ ruleDefaultEntities.stream().filter(rule -> event.contains(rule.getEventCode())).map(o -> {
+ PointRuleEntity entity = ConvertUtils.sourceToTarget(o, PointRuleEntity.class);
+ entity.setId("");
+ entity.setCreatedBy("");
+ entity.setCreatedTime(new Date());
+ entity.setUpdatedBy("");
+ entity.setUpdatedTime(new Date());
+ entity.setCustomerId(customerId);
+ insertList.add(entity);
+ return entity;
+ }).collect(Collectors.toList());
+ }
+ }
+ });
+ }
+
+ //从未被初始化的customerId
List haveInitCustomerIds = baseDao.selectCustomerIds();
if (haveInitCustomerIds == null) {
haveInitCustomerIds = new ArrayList<>();
}
- List insertList = new ArrayList<>();
+
for (PointRuleDefaultEntity defaultRule : ruleDefaultEntities) {
for (CustomerDTO customerDTO : customerDTOList) {
if (haveInitCustomerIds.contains(customerDTO.getId())) {
@@ -218,15 +251,27 @@ public class PointRuleServiceImpl extends BaseServiceImpl {
+ insertList.forEach(o -> {
+ try {
+ insertOperateRecord(null, o,null, CommonOperateTypeEnum.ADD.getCode());
+ }catch (Exception e) {
+ log.error("异步插入积分规则操作记录,错误信息:{}", ExceptionUtils.getErrorStackTrace(e));
+ }
+ });
+ });
+
InitPointRuleResultDTO result = new InitPointRuleResultDTO();
result.setCustomerTotal(customerDTOList.size());
result.setInitedTotal(insertList.size());
diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/resources/bootstrap.yml b/epmet-module/epmet-point/epmet-point-server/src/main/resources/bootstrap.yml
index 720887f6bd..b4767ef0d1 100644
--- a/epmet-module/epmet-point/epmet-point-server/src/main/resources/bootstrap.yml
+++ b/epmet-module/epmet-point/epmet-point-server/src/main/resources/bootstrap.yml
@@ -118,6 +118,14 @@ pagehelper:
helper-dialect: mysql
reasonable: false #分页合理化配置,例如输入页码为-1,则自动转化为最小页码1
+thread:
+ # 线程池配置
+ threadPool:
+ corePoolSize: @thread.pool.core-pool-size@
+ maxPoolSize: @thread.pool.max-pool-size@
+ queueCapacity: @thread.pool.queue-capacity@
+ keepAlive: @thread.pool.keep-alive@
+
dingTalk:
robot:
webHook: @dingTalk.robot.webHook@
diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
index afa7f9782f..2fb277c4ec 100644
--- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
+++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
@@ -444,7 +444,7 @@ public class IssueServiceImpl extends BaseServiceImpl imp
@Override
@Transactional(rollbackFor = Exception.class)
- public String audit(TokenDto token, IssueAuditionFormDTO param) {
+ public String audit(TokenDto token, IssueAuditionFormDTO param){
if (StringUtils.isNotBlank(param.getReason())) {
TextScanParamDTO textScanParamDTO = new TextScanParamDTO();
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/GroupMemeberOperationServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/GroupMemeberOperationServiceImpl.java
index 80931fc33c..8f4deee6c3 100644
--- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/GroupMemeberOperationServiceImpl.java
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/GroupMemeberOperationServiceImpl.java
@@ -36,6 +36,7 @@ import com.epmet.commons.tools.utils.SendMqMsgUtils;
import com.epmet.dto.IssueShareLinkRecordDTO;
import com.epmet.dto.IssueShareLinkVisitRecordDTO;
import com.epmet.dto.form.GetRoleKeyListFormDTO;
+import com.epmet.dto.result.UserBaseInfoResultDTO;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovIssueOpenFeignClient;
import com.epmet.modules.group.dao.ResiGroupDao;
@@ -324,8 +325,20 @@ public class GroupMemeberOperationServiceImpl extends BaseServiceImpl userParam = new LinkedList<>();
+ userParam.add(param.getUserId());
+ Result> userResponse = userClient.queryUserBaseInfo(userParam);
+ if(userResponse.success() && !CollectionUtils.isEmpty(userResponse.getData())){
+ UserBaseInfoResultDTO user = userResponse.getData().get(NumConstant.ZERO);
+ pointEventMsg.setRemark( new StringBuilder("邀请").append("加入")
+ .append(user.getStreet()).append("-").append(user.getSurname())
+ .append(StringUtils.equals(NumConstant.ONE_STR,user.getGender()) ? "先生" :
+ StringUtils.equals(NumConstant.TWO_STR,user.getGender()) ? "女士" : "先生/女士")
+ .append(resiGroupDTO.getGroupName()).append("小组").toString());
+ }
pointEventMsgList.add(pointEventMsg);
mqBaseMsgDTO.setMsg(JSON.toJSONString(pointEventMsgList));
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java
index cf997c93cb..ae48951046 100644
--- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java
@@ -34,6 +34,8 @@ import com.epmet.commons.tools.utils.SendMqMsgUtils;
import com.epmet.constant.ReadFlagConstant;
import com.epmet.dto.IssueShareLinkVisitRecordDTO;
import com.epmet.dto.form.*;
+import com.epmet.dto.result.UserBaseInfoResultDTO;
+import com.epmet.dto.result.UserBasicInfo;
import com.epmet.dto.result.UserResiInfoResultDTO;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
@@ -536,8 +538,20 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl userParam = new LinkedList<>();
+ userParam.add(groupMemeberOperationDTO.getCustomerUserId());
+ Result> userResponse = userOpenFeignClient.queryUserBaseInfo(userParam);
+ if(userResponse.success() && !CollectionUtils.isEmpty(userResponse.getData())){
+ UserBaseInfoResultDTO user = userResponse.getData().get(NumConstant.ZERO);
+ pointEventMsg.setRemark( new StringBuilder("邀请").append("加入")
+ .append(user.getStreet()).append("-").append(user.getSurname())
+ .append(StringUtils.equals(NumConstant.ONE_STR,user.getGender()) ? "先生" :
+ StringUtils.equals(NumConstant.TWO_STR,user.getGender()) ? "女士" : "先生/女士")
+ .append(resiGroupDTO.getGroupName()).append("小组").toString());
+ }
+
pointEventMsgList.add(pointEventMsg);
mqBaseMsgDTO.setMsg(JSON.toJSONString(pointEventMsgList));
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java
index dedf0a4bf3..03b37dc87d 100644
--- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java
@@ -1578,6 +1578,10 @@ public class ResiTopicServiceImpl extends BaseServiceImpl