From 2afab88590578646d5eb7ec0057387b19d289210 Mon Sep 17 00:00:00 2001 From: wangchao Date: Thu, 24 Dec 2020 17:20:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=A7=AF=E5=88=86=E8=A7=84=E5=88=99=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E7=BB=99=E7=A7=AF=E5=88=86=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=8A=A0=E4=B8=8A=E5=93=8D=E5=BA=94=E7=9A=84=E7=A7=AF?= =?UTF-8?q?=E5=88=86=E6=96=87=E6=A1=88=EF=BC=8C=E5=9C=A8=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=9A=84=E7=A7=AF=E5=88=86=E8=AE=B0=E5=BD=95=E9=87=8C=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet-point/epmet-point-server/pom.xml | 24 ++++++++ .../java/com/epmet/config/AsyncConfig.java | 49 +++++++++++++++ .../epmet/properties/ThreadProperties.java | 25 ++++++++ .../service/impl/PointRuleServiceImpl.java | 59 ++++++++++++++++--- .../src/main/resources/bootstrap.yml | 8 +++ .../epmet/service/impl/IssueServiceImpl.java | 2 +- .../GroupMemeberOperationServiceImpl.java | 17 +++++- .../impl/ResiGroupMemberServiceImpl.java | 18 +++++- .../service/impl/ResiTopicServiceImpl.java | 4 ++ 9 files changed, 194 insertions(+), 12 deletions(-) create mode 100644 epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/config/AsyncConfig.java create mode 100644 epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/properties/ThreadProperties.java 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