mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 15:55:18 +08:00
feat: 优化DingtalkBotService中的消息发送逻辑,增加对请求参数非空的检查
This commit is contained in:
@@ -7,6 +7,9 @@ import java.util.*;
|
||||
@Data
|
||||
public class SendMsgRequest {
|
||||
|
||||
private String organizationId;
|
||||
private String sceneCode;
|
||||
|
||||
private List<String> dingtalkBotIds;
|
||||
|
||||
private String dingtalkBotTemplateId;
|
||||
|
||||
@@ -10,6 +10,8 @@ import cn.lihongjie.coal.dingtalkBot.dto.*;
|
||||
import cn.lihongjie.coal.dingtalkBot.entity.DingtalkBotEntity;
|
||||
import cn.lihongjie.coal.dingtalkBot.mapper.DingtalkBotMapper;
|
||||
import cn.lihongjie.coal.dingtalkBot.repository.DingtalkBotRepository;
|
||||
import cn.lihongjie.coal.dingtalkBotScene.entity.DingtalkBotSceneEntity;
|
||||
import cn.lihongjie.coal.dingtalkBotScene.service.DingtalkBotSceneService;
|
||||
import cn.lihongjie.coal.dingtalkBotTemplate.entity.DingtalkBotTemplateEntity;
|
||||
import cn.lihongjie.coal.dingtalkBotTemplate.service.DingtalkBotTemplateService;
|
||||
import cn.lihongjie.coal.exception.BizException;
|
||||
@@ -22,6 +24,8 @@ import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.data.domain.Page;
|
||||
@@ -90,28 +94,43 @@ public class DingtalkBotService extends BaseService<DingtalkBotEntity, DingtalkB
|
||||
return page.map(this.mapper::toDto);
|
||||
}
|
||||
|
||||
@Autowired DingtalkBotSceneService dingtalkBotSceneService;
|
||||
|
||||
public SendMsgResponse send(SendMsgRequest request) {
|
||||
|
||||
SendMsgResponse response = new SendMsgResponse();
|
||||
ArrayList<SendMsgResult> results = new ArrayList<>();
|
||||
response.setResults(results);
|
||||
List<DingtalkBotEntity> all = this.repository.findAllById(request.getDingtalkBotIds());
|
||||
List<DingtalkBotEntity> botList;
|
||||
DingtalkBotTemplateEntity template;
|
||||
if (StringUtils.isNotEmpty(request.getSceneCode())) {
|
||||
|
||||
DingtalkBotTemplateEntity dingtalkBotTemplateEntity =
|
||||
dingtalkBotTemplateService.get(request.getDingtalkBotTemplateId());
|
||||
DingtalkBotSceneEntity scene =
|
||||
dingtalkBotSceneService.getByCode(
|
||||
request.getOrganizationId(), request.getSceneCode());
|
||||
|
||||
for (DingtalkBotEntity dingtalkBotEntity : all) {
|
||||
botList = scene.getDingtalkBots();
|
||||
template = scene.getDingtalkBotTemplate();
|
||||
} else {
|
||||
|
||||
results.add(doSend(dingtalkBotEntity, dingtalkBotTemplateEntity, request.getParams()));
|
||||
botList = this.repository.findAllById(request.getDingtalkBotIds());
|
||||
template = dingtalkBotTemplateService.get(request.getDingtalkBotTemplateId());
|
||||
}
|
||||
|
||||
if (MapUtils.isNotEmpty(request.getParams())) {
|
||||
|
||||
for (DingtalkBotEntity dingtalkBotEntity : botList) {
|
||||
results.add(doSend(dingtalkBotEntity, template, request.getParams()));
|
||||
}
|
||||
}
|
||||
|
||||
if (CollectionUtils.isNotEmpty(request.getParamsList())) {
|
||||
|
||||
for (DingtalkBotEntity dingtalkBotEntity : all) {
|
||||
for (DingtalkBotEntity dingtalkBotEntity : botList) {
|
||||
|
||||
for (Map<String, Object> params : request.getParamsList()) {
|
||||
|
||||
results.add(doSend(dingtalkBotEntity, dingtalkBotTemplateEntity, params));
|
||||
results.add(doSend(dingtalkBotEntity, template, params));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,11 @@ import cn.lihongjie.coal.dingtalkBotScene.mapper.DingtalkBotSceneMapper;
|
||||
import cn.lihongjie.coal.dingtalkBotScene.repository.DingtalkBotSceneRepository;
|
||||
import cn.lihongjie.coal.exception.BizException;
|
||||
|
||||
import jakarta.persistence.criteria.CriteriaBuilder;
|
||||
import jakarta.persistence.criteria.CriteriaQuery;
|
||||
import jakarta.persistence.criteria.Predicate;
|
||||
import jakarta.persistence.criteria.Root;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -19,9 +24,12 @@ import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@Transactional
|
||||
@@ -78,4 +86,28 @@ public class DingtalkBotSceneService
|
||||
|
||||
return page.map(this.mapper::toDto);
|
||||
}
|
||||
|
||||
public DingtalkBotSceneEntity getByCode(String organizationId, String sceneCode) {
|
||||
|
||||
List<DingtalkBotSceneEntity> all =
|
||||
repository.findAll(
|
||||
new Specification<DingtalkBotSceneEntity>() {
|
||||
@Override
|
||||
public Predicate toPredicate(
|
||||
Root<DingtalkBotSceneEntity> root,
|
||||
CriteriaQuery<?> query,
|
||||
CriteriaBuilder criteriaBuilder) {
|
||||
return criteriaBuilder.and(
|
||||
criteriaBuilder.equal(
|
||||
root.get("organization_id"), organizationId),
|
||||
criteriaBuilder.equal(root.get("code"), sceneCode));
|
||||
}
|
||||
});
|
||||
|
||||
if (all.isEmpty()) {
|
||||
throw new BizException("场景不存在 " + sceneCode);
|
||||
}
|
||||
|
||||
return all.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user