feat: 优化DingtalkBotService中的消息发送逻辑,增加对请求参数非空的检查

This commit is contained in:
2025-02-10 22:59:29 +08:00
parent 23d630c6e7
commit 21927cbf55
3 changed files with 61 additions and 7 deletions

View File

@@ -7,6 +7,9 @@ import java.util.*;
@Data
public class SendMsgRequest {
private String organizationId;
private String sceneCode;
private List<String> dingtalkBotIds;
private String dingtalkBotTemplateId;

View File

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

View File

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