Req-3117 扩展接口,支持多方调用,并添加到单元测试类

This commit is contained in:
zhongpeng 2024-11-18 16:39:38 +08:00
parent bc3aa326c7
commit b075ffe9bb
9 changed files with 125 additions and 24 deletions

View File

@ -0,0 +1,14 @@
package cn.axzo.riven.client.common.enums;
/**
* 钉钉场景不同的值对应不同的后端密钥
* @author zhongpeng
* @since 2024-11-18
*/
public enum DingDingSceneEnum {
//运营群通知目前用工一期发送消息给钉钉群通知云运营审核
WORK_OPERATION,
//公用告警群
COMMON_ALERT,
;
}

View File

@ -1,5 +1,6 @@
package cn.axzo.riven.client.req;
import cn.axzo.riven.client.common.enums.DingDingSceneEnum;
import cn.axzo.riven.client.common.enums.DingTalkMsgTypeEnum;
import cn.axzo.riven.client.model.ReplyMessage;
import lombok.Data;
@ -22,4 +23,11 @@ public class DingDingSendRebootGroupMsgReq {
* 其中的消息markdown格式的消息具体见https://open.dingtalk.com/document/orgapp/message-types-and-data-format#
*/
private ReplyMessage replyMessage;
/**
* 业务场景
* 不同的业务场景对应后端配置不同的密钥和接受的群
* 暂时不支持对多个群发送如有需求可以进行改造
*/
private DingDingSceneEnum dingDingSceneEnum;
}

View File

@ -1,10 +1,14 @@
package cn.axzo.riven.config;
import cn.axzo.riven.client.common.enums.DingDingSceneEnum;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Value;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import java.util.List;
/**
* 后续其他钉钉配置可以收口到这里
* @author zhongpeng@axzo.cn
@ -12,17 +16,24 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@RefreshScope
@Getter
@Setter
@ConfigurationProperties(prefix = "reboot.group")
public class DingDingRebootMainConfig {
@Value("${reboot.operation.appKey:dingx9pejjkh8whnaqkw}")
private String appKey;
@Value("${reboot.operation.appSecret:IViT8sL_VVZ03gRc3oIvbtzS0DsTKUI9pLgXSNh9FErHgzFR_97liY5g6SpmJpjk}")
private String appSecret;
@Value("${reboot.operation.agentId:3286362019}")
private Long agentId;
//机器人的ID
@Value("${reboot.operation.rebootCode:dingx9pejjkh8whnaqkw}")
private String rebootCode;
//群的ID可以升级为支持多个群
@Value("${reboot.operation.openConversationId:cidAy86bIrB513xUaCOmvD/Hg==}")
private String openConversationId;
List<DingDingConfigDTO> list;
@Setter
@Getter
public static class DingDingConfigDTO {
private String appKey;
private String appSecret;
private Long agentId;
//机器人的ID
private String rebootCode;
//群的ID可以升级为支持多个群
private String openConversationId;
private DingDingSceneEnum dingDingSceneEnum;
}
}

View File

@ -2,6 +2,7 @@ package cn.axzo.riven.service;
import cn.axzo.framework.data.mybatisplus.model.BaseEntity;
import cn.axzo.framework.domain.web.code.BaseCode;
import cn.axzo.riven.client.common.enums.DingDingSceneEnum;
import cn.axzo.riven.client.req.DingDingSendRebootGroupMsgReq;
import cn.axzo.riven.client.req.DingDingSendRebootMsgReq;
import cn.axzo.riven.common.constants.DingDingJumpConstant;
@ -20,10 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -97,9 +95,29 @@ public class DingDingRebootService {
public void sendCorpRebootGroupMsg(DingDingSendRebootGroupMsgReq req) {
GetAccessTokenResponseBody accessToken = dingDingNewSdkManger.getAccessToken(dingDingRebootMainConfig.getAppKey(), dingDingRebootMainConfig.getAppSecret());
dingDingNewSdkManger.sendGroupMessage(accessToken.getAccessToken(), dingDingRebootMainConfig.getRebootCode(), dingDingRebootMainConfig.getOpenConversationId(), req);
//根据场景选择对应的配置
DingDingRebootMainConfig.DingDingConfigDTO dto = getByEnum(req.getDingDingSceneEnum());
//获取token
GetAccessTokenResponseBody accessToken = dingDingNewSdkManger.getAccessToken(dto.getAppKey(), dto.getAppSecret());
//发送消息
dingDingNewSdkManger.sendGroupMessage(accessToken.getAccessToken(), dto.getRebootCode(), dto.getOpenConversationId(), req);
}
/**
* 根据业务场景匹配对应的发送钉钉配置
* @param dingDingSceneEnum
* @return
*/
private DingDingRebootMainConfig.DingDingConfigDTO getByEnum(DingDingSceneEnum dingDingSceneEnum) {
if (Objects.nonNull(dingDingSceneEnum) && !CollectionUtils.isEmpty(dingDingRebootMainConfig.getList())) {
for (DingDingRebootMainConfig.DingDingConfigDTO dto : dingDingRebootMainConfig.getList()) {
if (dingDingSceneEnum == dto.getDingDingSceneEnum()) {
return dto;
}
}
}
throw Throws.bizException(BaseCode.UNAVAILABLE_FOR_LEGAL_REASONS, "发送钉钉群的业务场景对应配置不存在,请检查配置和业务场景的对应关系");
}
}

View File

@ -0,0 +1,23 @@
##钉钉群消息发送配置
reboot:
group:
list:
#场景-运营通知
- dingDingSceneEnum: WORK_OPERATION
appKey: dingx9pejjkh8whnaqkw
appSecret: IViT8sL_VVZ03gRc3oIvbtzS0DsTKUI9pLgXSNh9FErHgzFR_97liY5g6SpmJpjk
agentId: 3286362019
#机器人ID
rebootCode: dingx9pejjkh8whnaqkw
#群ID
openConversationId: cidAy86bIrB513xUaCOmvD/Hg==
#场景-公用告警通知,待补充
- dingDingSceneEnum: COMMON_ALERT
appKey: 待补充
appSecret: 待补充
agentId: 0
#机器人ID
rebootCode: 待补充
#群ID
openConversationId: 待补充

View File

@ -17,4 +17,7 @@ spring:
allow-bean-definition-overriding: true
server:
shutdown: graceful
shutdown: graceful

View File

@ -0,0 +1,18 @@
package cn.axzo.riven.test;
import cn.axzo.riven.Application;
import cn.azxo.framework.common.logger.JobLoggerTemplate;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
/**
* @author zhongpeng
* @date 2024/11/18 16:33
*/
@SpringBootTest(classes = Application.class)
public class BaseTest {
@MockBean
JobLoggerTemplate jobLoggerTemplate;
}

View File

@ -2,16 +2,19 @@ package cn.axzo.riven.test;
import cn.axzo.basics.profiles.api.UserProfileServiceApi;
import cn.axzo.riven.Application;
import cn.axzo.riven.client.common.enums.DingDingSceneEnum;
import cn.axzo.riven.client.common.enums.DingTalkMsgTypeEnum;
import cn.axzo.riven.client.model.SampleActionCard6;
import cn.axzo.riven.client.req.DingDingSendRebootGroupMsgReq;
import cn.axzo.riven.config.FeignConfiguration;
import cn.axzo.riven.controller.DingDingMsgController;
import cn.axzo.riven.test.taizhou.AxzoUserProfileServiceApiTest;
import cn.azxo.framework.common.logger.JobLoggerTemplate;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.FeignAutoConfiguration;
import org.springframework.context.annotation.Configuration;
@ -23,19 +26,21 @@ import javax.annotation.Resource;
* @author zhongpeng
* @date 2024/11/14 18:17
*/
@SpringBootTest(classes = Application.class)
public class DingDingMsgControllerTest {
public class DingDingMsgControllerTest extends BaseTest {
@Resource
private DingDingMsgController dingDingMsgController;
@Test
public void test() {
DingDingSendRebootGroupMsgReq req = new DingDingSendRebootGroupMsgReq();
req.setMsgType(DingTalkMsgTypeEnum.sampleActionCard6);
req.setDingDingSceneEnum(DingDingSceneEnum.WORK_OPERATION);
String title = "标题";
String text = "内容 \n ## 标题1 你好";

View File

@ -39,7 +39,8 @@ public class DingDingTest {
private static final String robotCode = "dingx9pejjkh8whnaqkw";
private static final String token = "8b154088e6f235fa8155daffca12b6cc";
//需要调用testGetAccessToken获取最新token
private static final String token = "24bef3d2e00534b3887eafb5b47d4006";
private static final String openConversationId = "cidAy86bIrB513xUaCOmvD/Hg==";