fix:消息通知策略改造
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
package com.sdm.system.config;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 客户定制化消息推送配置
|
||||
*/
|
||||
@Data
|
||||
@ConfigurationProperties(prefix = "message")
|
||||
@Component
|
||||
public class CustomMessageConfig {
|
||||
/**
|
||||
* 客户配置映射
|
||||
*/
|
||||
private Map<String, CustomerProperties> customers = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 当前活跃客户配置
|
||||
*/
|
||||
private String activeCustomer;
|
||||
|
||||
@Data
|
||||
public static class CustomerProperties {
|
||||
private boolean enabled = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.sdm.system.service.handle;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.entity.req.system.SendMsgReq;
|
||||
import com.sdm.common.utils.HttpClientUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class BasicMessageSender implements IMessageSender {
|
||||
|
||||
@Value("${cid.url}")
|
||||
private String cidUrl;
|
||||
|
||||
@Value("${cid.msg.sendMessage}")
|
||||
private String sendMessagePath;
|
||||
|
||||
@Autowired
|
||||
private HttpClientUtil httpClientUtil;
|
||||
|
||||
@Override
|
||||
public void send(SendMsgReq req) {
|
||||
log.info("BasicMessageSender start....");
|
||||
String url = cidUrl + sendMessagePath;
|
||||
CompletableFuture.runAsync(() -> {
|
||||
try {
|
||||
log.info("开始异步调用Cid Msg服务...");
|
||||
if (req.isSendCid()) {
|
||||
log.info("[sendMessage] cid url:{}, param:{}", url, JSONUtil.toJsonStr(req));
|
||||
String resultString = httpClientUtil.doPostJson(url, JSON.toJSONString(req));
|
||||
SdmResponse response = JSON.parseObject(resultString, SdmResponse.class);
|
||||
log.info("[sendMessage] cid url:{}, response:{}", url, JSONUtil.toJsonStr(response));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("异步调用Cid Msg服务异常: {}", e.getMessage(), e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supports(String customerCode) {
|
||||
return "basic".equals(customerCode);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.sdm.system.service.handle;
|
||||
|
||||
import com.sdm.common.entity.req.system.SendMsgReq;
|
||||
|
||||
public interface IMessageSender {
|
||||
/**
|
||||
* 发送消息
|
||||
*/
|
||||
void send(SendMsgReq req);
|
||||
|
||||
/**
|
||||
* 是否支持该客户
|
||||
*/
|
||||
boolean supports(String customerCode);
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package com.sdm.system.service.handle;
|
||||
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.common.ThreadLocalContext;
|
||||
import com.sdm.common.entity.req.system.SendMsgReq;
|
||||
import com.sdm.common.entity.req.system.UserQueryReq;
|
||||
import com.sdm.common.entity.resp.system.CIDUserResp;
|
||||
import com.sdm.common.feign.impl.system.SysUserFeignClientImpl;
|
||||
import com.sdm.outbridge.mode.FreeLinkMsg;
|
||||
import com.sdm.outbridge.mode.FreelinkAndDingdingInformReq;
|
||||
import com.sdm.outbridge.service.lyric.LyricIntegrateService;
|
||||
import com.sdm.system.config.CustomMessageConfig;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class LyricMessageSender implements IMessageSender {
|
||||
|
||||
@Value("${thirdparty.freelink.sendUserId}")
|
||||
private String sendUserId;
|
||||
|
||||
@Value("${thirdparty.freelink.switchFlag}")
|
||||
private String switchFlag;
|
||||
|
||||
@Autowired
|
||||
private LyricIntegrateService lyricIntegrateService;
|
||||
|
||||
@Autowired
|
||||
SysUserFeignClientImpl sysUserFeignClient;
|
||||
|
||||
@Autowired
|
||||
private BasicMessageSender basicSender;
|
||||
|
||||
@Autowired
|
||||
private CustomMessageConfig customerConfig;
|
||||
|
||||
@Override
|
||||
public void send(SendMsgReq req) {
|
||||
log.info("LyricMessageSender start....");
|
||||
// 1、先调用基础发送
|
||||
basicSender.send(req);
|
||||
|
||||
// 2、异步发送即时通消息通知
|
||||
CompletableFuture.runAsync(() -> {
|
||||
sendMsgToFreelink(req);
|
||||
});
|
||||
}
|
||||
|
||||
private void sendMsgToFreelink(SendMsgReq req) {
|
||||
FreelinkAndDingdingInformReq param = new FreelinkAndDingdingInformReq();
|
||||
// 根据userId查询工号
|
||||
UserQueryReq userReq = new UserQueryReq();
|
||||
userReq.setUserId(ThreadLocalContext.getUserId());
|
||||
userReq.setTenantId(ThreadLocalContext.getTenantId());
|
||||
SdmResponse<CIDUserResp> sdmResponse = sysUserFeignClient.queryUserDetail(userReq);
|
||||
if (sdmResponse.getData() != null) {
|
||||
param.setJobNo(sdmResponse.getData().getUsername());
|
||||
}
|
||||
FreeLinkMsg freeLinkMsg = new FreeLinkMsg();
|
||||
if (switchFlag.equals("true")) {
|
||||
userReq.setUserId(Long.valueOf(req.getUserId()));
|
||||
SdmResponse<CIDUserResp> response = sysUserFeignClient.queryUserDetail(userReq);
|
||||
if (response.getData() != null) {
|
||||
freeLinkMsg.setId(response.getData().getUsername());
|
||||
}
|
||||
} else {
|
||||
freeLinkMsg.setId(sendUserId);
|
||||
}
|
||||
freeLinkMsg.setType("text");
|
||||
freeLinkMsg.setMsg(req.getContent());
|
||||
freeLinkMsg.setUser("66666");
|
||||
freeLinkMsg.setPawd("lyric@123");
|
||||
freeLinkMsg.setFreelinkAppId("d7eb3ef7c8e8c93e7c6e978fee848646");
|
||||
param.setFreeLinkMsg(freeLinkMsg);
|
||||
lyricIntegrateService.pushFreeLinkMsg(param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supports(String customerCode) {
|
||||
return "lyric".equals(customerCode);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.sdm.system.service.handle;
|
||||
|
||||
import com.sdm.system.config.CustomMessageConfig;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class MessageSenderSelector {
|
||||
|
||||
@Autowired
|
||||
private List<IMessageSender> senders;
|
||||
|
||||
@Autowired
|
||||
private BasicMessageSender basicSender;
|
||||
|
||||
@Autowired
|
||||
private CustomMessageConfig messageConfig;
|
||||
|
||||
/**
|
||||
* 根据客户选择发送策略
|
||||
*/
|
||||
public IMessageSender selectSender() {
|
||||
String customerCode = messageConfig.getActiveCustomer();
|
||||
if (customerCode == null) {
|
||||
return basicSender;
|
||||
}
|
||||
CustomMessageConfig.CustomerProperties config = messageConfig.getCustomers().get(customerCode);
|
||||
// 如果配置不存在或未启用,直接返回基础策略
|
||||
if (config == null || !config.isEnabled()) {
|
||||
return basicSender;
|
||||
}
|
||||
for (IMessageSender sender : senders) {
|
||||
if (sender.supports(customerCode)) {
|
||||
return sender;
|
||||
}
|
||||
}
|
||||
return basicSender;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,101 +1,29 @@
|
||||
package com.sdm.system.service.impl;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.common.ThreadLocalContext;
|
||||
import com.sdm.common.entity.req.system.SendMsgReq;
|
||||
import com.sdm.common.entity.req.system.UserQueryReq;
|
||||
import com.sdm.common.entity.resp.system.CIDUserResp;
|
||||
import com.sdm.common.feign.impl.system.SysUserFeignClientImpl;
|
||||
import com.sdm.common.utils.HttpClientUtil;
|
||||
import com.sdm.outbridge.mode.FreeLinkMsg;
|
||||
import com.sdm.outbridge.mode.FreelinkAndDingdingInformReq;
|
||||
import com.sdm.outbridge.service.lyric.LyricIntegrateService;
|
||||
import com.sdm.system.service.ISimulationMessageService;
|
||||
import com.sdm.system.service.handle.IMessageSender;
|
||||
import com.sdm.system.service.handle.MessageSenderSelector;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class SimulationMessageServiceImpl implements ISimulationMessageService {
|
||||
|
||||
@Value("${cid.url}")
|
||||
private String cidUrl;
|
||||
|
||||
@Value("${cid.msg.sendMessage}")
|
||||
private String sendMessagePath;
|
||||
|
||||
@Value("${thirdparty.freelink.sendUserId}")
|
||||
private String sendUserId;
|
||||
|
||||
@Value("${thirdparty.freelink.switchFlag}")
|
||||
private String switchFlag;
|
||||
|
||||
@Autowired
|
||||
private HttpClientUtil httpClientUtil;
|
||||
|
||||
@Autowired
|
||||
private LyricIntegrateService lyricIntegrateService;
|
||||
|
||||
@Autowired
|
||||
SysUserFeignClientImpl sysUserFeignClient;
|
||||
private MessageSenderSelector senderSelector;
|
||||
|
||||
@Override
|
||||
public SdmResponse sendMessage(SendMsgReq req) {
|
||||
String url = cidUrl + sendMessagePath;
|
||||
CompletableFuture.runAsync(() -> {
|
||||
try {
|
||||
log.info("开始异步调用Cid Msg服务...");
|
||||
if (req.isSendCid()) {
|
||||
log.info("[sendMessage] cid url:{}, param:{}", url, JSONUtil.toJsonStr(req));
|
||||
String resultString = httpClientUtil.doPostJson(url, JSON.toJSONString(req));
|
||||
SdmResponse response = JSON.parseObject(resultString, SdmResponse.class);
|
||||
log.info("[sendMessage] cid url:{}, response:{}", url, JSONUtil.toJsonStr(response));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("异步调用Cid Msg服务异常: {}", e.getMessage(), e);
|
||||
}
|
||||
});
|
||||
// 异步发送即时通消息通知
|
||||
CompletableFuture.runAsync(() -> {
|
||||
sendMsgToFreelink(req);
|
||||
});
|
||||
IMessageSender messageSender = senderSelector.selectSender();
|
||||
messageSender.send(req);
|
||||
return SdmResponse.success();
|
||||
}
|
||||
|
||||
private void sendMsgToFreelink(SendMsgReq req) {
|
||||
FreelinkAndDingdingInformReq param = new FreelinkAndDingdingInformReq();
|
||||
// 根据userId查询工号
|
||||
UserQueryReq userReq = new UserQueryReq();
|
||||
userReq.setUserId(ThreadLocalContext.getUserId());
|
||||
userReq.setTenantId(ThreadLocalContext.getTenantId());
|
||||
SdmResponse<CIDUserResp> sdmResponse = sysUserFeignClient.queryUserDetail(userReq);
|
||||
if (sdmResponse.getData() != null) {
|
||||
param.setJobNo(sdmResponse.getData().getUsername());
|
||||
}
|
||||
FreeLinkMsg freeLinkMsg = new FreeLinkMsg();
|
||||
if (switchFlag.equals("true")) {
|
||||
userReq.setUserId(Long.valueOf(req.getUserId()));
|
||||
SdmResponse<CIDUserResp> response = sysUserFeignClient.queryUserDetail(userReq);
|
||||
if (response.getData() != null) {
|
||||
freeLinkMsg.setId(response.getData().getUsername());
|
||||
}
|
||||
} else {
|
||||
freeLinkMsg.setId(sendUserId);
|
||||
}
|
||||
freeLinkMsg.setType("text");
|
||||
freeLinkMsg.setMsg(req.getContent());
|
||||
freeLinkMsg.setUser("66666");
|
||||
freeLinkMsg.setPawd("lyric@123");
|
||||
freeLinkMsg.setFreelinkAppId("d7eb3ef7c8e8c93e7c6e978fee848646");
|
||||
param.setFreeLinkMsg(freeLinkMsg);
|
||||
lyricIntegrateService.pushFreeLinkMsg(param);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -179,6 +179,14 @@ thirdparty:
|
||||
sendUserId: Q12345
|
||||
switchFlag: false
|
||||
|
||||
message:
|
||||
active-customer: basic
|
||||
customers:
|
||||
basic:
|
||||
enabled: true
|
||||
lyric:
|
||||
enabled: false
|
||||
|
||||
security:
|
||||
whitelist:
|
||||
paths:
|
||||
|
||||
@@ -179,6 +179,14 @@ thirdparty:
|
||||
sendUserId: Q12345
|
||||
switchFlag: false
|
||||
|
||||
message:
|
||||
active-customer: basic
|
||||
customers:
|
||||
basic:
|
||||
enabled: true
|
||||
lyric:
|
||||
enabled: false
|
||||
|
||||
security:
|
||||
whitelist:
|
||||
paths:
|
||||
|
||||
@@ -179,6 +179,14 @@ thirdparty:
|
||||
sendUserId: Q12345
|
||||
switchFlag: false
|
||||
|
||||
message:
|
||||
active-customer: lyric
|
||||
customers:
|
||||
basic:
|
||||
enabled: false
|
||||
lyric:
|
||||
enabled: true
|
||||
|
||||
security:
|
||||
whitelist:
|
||||
paths:
|
||||
|
||||
@@ -179,6 +179,14 @@ thirdparty:
|
||||
sendUserId: Q12345
|
||||
switchFlag: false
|
||||
|
||||
message:
|
||||
active-customer: basic
|
||||
customers:
|
||||
basic:
|
||||
enabled: true
|
||||
lyric:
|
||||
enabled: false
|
||||
|
||||
security:
|
||||
whitelist:
|
||||
paths:
|
||||
|
||||
Reference in New Issue
Block a user