feat(REQ-3114) - 处理多环境的 stream 模式会导致返回的信息有问题

This commit is contained in:
wangli 2024-10-29 09:32:10 +08:00
parent 42b6618acf
commit 2fb2ba8695
2 changed files with 19 additions and 7 deletions

View File

@ -7,7 +7,8 @@ import cn.axzo.riven.dingtalk.service.ThirdApplicationService;
import cn.azxo.framework.common.model.CommonResponse;
import cn.hutool.core.bean.BeanUtil;
import com.dingtalk.open.app.api.OpenDingTalkClient;
import org.hibernate.validator.constraints.EAN;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@ -16,7 +17,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
@ -31,13 +31,19 @@ import static cn.axzo.riven.dingtalk.robot.connection.AutoConnector.clientMap;
@RestController
@RequestMapping("/webApi/dingtalk")
public class DingtalkController {
@Value("${spring.profiles.active}")
private String activeProfile;
@Resource
private ThirdApplicationService thirdApplicationService;
@EAN
@Resource
private AutoConnector autoConnector;
@PostMapping("/enabled")
public CommonResponse<String> changeStream(@RequestParam String appId, @RequestParam Boolean enable) {
public CommonResponse<String> changeStream(@RequestParam(required = false) String appId, @RequestParam Boolean enable) {
List<String> envs = Lists.newArrayList("dev", "local");
if (!envs.contains(activeProfile)) {
return CommonResponse.success("非 dev/local 环境不可用");
}
OpenDingTalkClient client = clientMap.getOrDefault(appId, null);
try {
if (enable && Objects.isNull(client)) {

View File

@ -1,9 +1,9 @@
package cn.axzo.riven.dingtalk.robot.connection;
import cn.axzo.riven.client.req.ThirdApplicationReq;
import cn.axzo.riven.dingtalk.callback.robot.RobotMsgCallbackConsumer;
import cn.axzo.riven.dingtalk.config.RefreshableConfiguration;
import cn.axzo.riven.dingtalk.listener.dd.DingTalkAllEventListener;
import cn.axzo.riven.dingtalk.callback.robot.RobotMsgCallbackConsumer;
import cn.axzo.riven.dingtalk.repository.entity.ThirdApplication;
import cn.axzo.riven.dingtalk.service.ThirdApplicationService;
import com.alibaba.fastjson.JSON;
@ -11,6 +11,7 @@ import com.dingtalk.open.app.api.OpenDingTalkClient;
import com.dingtalk.open.app.api.OpenDingTalkStreamClientBuilder;
import com.dingtalk.open.app.api.callback.DingTalkStreamTopics;
import com.dingtalk.open.app.api.security.AuthClientCredential;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@ -31,6 +32,8 @@ import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@Component
public class AutoConnector {
@Value("${spring.profiles.active}")
private String activeProfile;
public static final Map<String, OpenDingTalkClient> clientMap = new ConcurrentHashMap<>();
@Resource
private RefreshableConfiguration refreshableConfiguration;
@ -41,8 +44,11 @@ public class AutoConnector {
@PostConstruct
public void init() {
List<String> envs = Lists.newArrayList("dev", "local");
if (envs.contains(activeProfile)) {
doConnection();
}
}
private void doConnection() {
List<ThirdApplication> thirdApplications = applicationService.genericQuery(new ThirdApplicationReq());