diff --git a/src/main/java/cn/lihongjie/coal/dingtalkBot/dto/SendMsgRequest.java b/src/main/java/cn/lihongjie/coal/dingtalkBot/dto/SendMsgRequest.java index 9bafd092..1f7ad06d 100644 --- a/src/main/java/cn/lihongjie/coal/dingtalkBot/dto/SendMsgRequest.java +++ b/src/main/java/cn/lihongjie/coal/dingtalkBot/dto/SendMsgRequest.java @@ -7,6 +7,9 @@ import java.util.*; @Data public class SendMsgRequest { + private String organizationId; + private String sceneCode; + private List dingtalkBotIds; private String dingtalkBotTemplateId; diff --git a/src/main/java/cn/lihongjie/coal/dingtalkBot/service/DingtalkBotService.java b/src/main/java/cn/lihongjie/coal/dingtalkBot/service/DingtalkBotService.java index 3fa93063..a159db80 100644 --- a/src/main/java/cn/lihongjie/coal/dingtalkBot/service/DingtalkBotService.java +++ b/src/main/java/cn/lihongjie/coal/dingtalkBot/service/DingtalkBotService.java @@ -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 results = new ArrayList<>(); response.setResults(results); - List all = this.repository.findAllById(request.getDingtalkBotIds()); + List 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 params : request.getParamsList()) { - results.add(doSend(dingtalkBotEntity, dingtalkBotTemplateEntity, params)); + results.add(doSend(dingtalkBotEntity, template, params)); } } } diff --git a/src/main/java/cn/lihongjie/coal/dingtalkBotScene/service/DingtalkBotSceneService.java b/src/main/java/cn/lihongjie/coal/dingtalkBotScene/service/DingtalkBotSceneService.java index c621f69c..87348d0c 100644 --- a/src/main/java/cn/lihongjie/coal/dingtalkBotScene/service/DingtalkBotSceneService.java +++ b/src/main/java/cn/lihongjie/coal/dingtalkBotScene/service/DingtalkBotSceneService.java @@ -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 all = + repository.findAll( + new Specification() { + @Override + public Predicate toPredicate( + Root 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); + } }