Merge branch 'feature/REQ-3541'
This commit is contained in:
commit
bf1b27af1f
@ -12,6 +12,8 @@ import lombok.RequiredArgsConstructor;
|
||||
public enum MnsChannel {
|
||||
// 政务: 高新渠道. 政府渠道, 请勿随意使用
|
||||
REGULATORY_GAOXIN("regulatory_gaoxin"),
|
||||
// 政务: 龙泉渠道. 政府渠道, 请勿随意使用
|
||||
REGULATORY_LONGQUAN("regulatory_longquan"),
|
||||
// 阿里云 (当前默认)
|
||||
ALIYUN("aliyun")
|
||||
;
|
||||
|
||||
@ -22,7 +22,8 @@ public enum ChannelHandlerEnum implements EnumBase<String> {
|
||||
CHUANG_LAN("chuanglan", "chuangLanSmsSendManager", "创蓝"),
|
||||
SUB_MAIL("sub_mail", "subMailSmsSendManager", "赛邮"),
|
||||
LIAN_LU("lian_lu", "lianLuSmsSendManager", "联麓"),
|
||||
REGULATORY_GAOXIN("regulatory_gaoxin", "regulatoryGaoxinManager", "监管机构: 高新")
|
||||
REGULATORY_GAOXIN("regulatory_gaoxin", "regulatoryGaoxinManager", "监管机构: 高新"),
|
||||
REGULATORY_LONGQUAN("regulatory_longquan", "regulatoryLongquanManager", "监管机构: 龙泉")
|
||||
;
|
||||
|
||||
private final String code;
|
||||
|
||||
@ -21,7 +21,8 @@ public enum MessageChannelEnum implements EnumBase<String> {
|
||||
CHUANG_LAN("chuanglan", "创蓝云智"),
|
||||
SUB_MAIL("sub_mail", "赛邮"),
|
||||
LIAN_LU("lian_lu", "联麓"),
|
||||
REGULATORY_GAOXIN("regulatory_gaoxin", "监管机构: 高新")
|
||||
REGULATORY_GAOXIN("regulatory_gaoxin", "监管机构: 高新"),
|
||||
REGULATORY_LONGQUAN("regulatory_longquan", "监管机构: 龙泉"),
|
||||
;
|
||||
|
||||
private final String code;
|
||||
|
||||
@ -54,10 +54,6 @@ public class MessageSendRequestDto {
|
||||
* 短信模版
|
||||
*/
|
||||
private MNSMessageTemplate template;
|
||||
/**
|
||||
* 渠道模版信息
|
||||
*/
|
||||
private MNSChannelMessageTemplate channelTemplate;
|
||||
|
||||
/**
|
||||
* 原始请求
|
||||
|
||||
@ -65,7 +65,7 @@ public class MessageChannelRouteImpl implements MessageChannelRouter {
|
||||
final Set<String> pickChannelCodes = new HashSet<>(mappedChannelCodes);
|
||||
// 解析入参是否指定了渠道
|
||||
String specifyChannelCode = parseCondition(condition);
|
||||
if (pickChannelCodes.contains(specifyChannelCode)) {
|
||||
if (StringUtils.isNotBlank(specifyChannelCode)) {
|
||||
// 指定的渠道编码在映射关系中, 优先使用该渠道
|
||||
pickChannelCodes.clear();
|
||||
pickChannelCodes.add(specifyChannelCode);
|
||||
|
||||
@ -51,13 +51,7 @@ public class MessageTemplateManagerImpl implements MessageTemplateManager {
|
||||
|
||||
@Override
|
||||
public MNSChannelMessageTemplate queryChannelTemplate(String innerTemplateNo, String channelCode) {
|
||||
MNSChannelMessageTemplate channelMessageTemplate = mnsChannelMessageTemplateDao
|
||||
.queryByTemplateNo(innerTemplateNo, channelCode);
|
||||
BizException.error(channelMessageTemplate != null, ReturnCodeEnum.MESSAGE_TEMPLATE_NOT_EXIST);
|
||||
BizException
|
||||
.error(AvailableStatusEnum.AVAILABLE.getStatus().equals(channelMessageTemplate.getStatus()),
|
||||
ReturnCodeEnum.MESSAGE_TEMPLATE_NOT_VALID);
|
||||
return channelMessageTemplate;
|
||||
return mnsChannelMessageTemplateDao.queryByTemplateNo(innerTemplateNo, channelCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -8,13 +8,12 @@ import cn.axzo.msg.center.notices.manager.api.dto.request.MessageSendRequestDto;
|
||||
import cn.axzo.msg.center.notices.manager.api.dto.response.BatchMessageSendResponseDto;
|
||||
import cn.axzo.msg.center.notices.manager.api.dto.response.SendSmsCommonResponseDto;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 政务系统
|
||||
* 政务: 高新
|
||||
*
|
||||
* @author yanglin
|
||||
*/
|
||||
@ -23,19 +22,12 @@ import org.springframework.stereotype.Service;
|
||||
@Service("regulatoryGaoxinManager")
|
||||
public class RegulatoryGaoxinManager implements SmsSendManager {
|
||||
|
||||
private static final String USE_CHANNEL_CONTENT = "use_channel_content";
|
||||
|
||||
private final RegulatoryGaoxinClient regulatoryGaoxinClient;
|
||||
|
||||
@Override
|
||||
public SendSmsCommonResponseDto sendMessage(MessageSendRequestDto request) {
|
||||
log.info("[RegulatoryGaoxinManager#sendMessage] -> 政务高新 - 发送sms {}", JSON.toJSONString(request));
|
||||
JSONObject expansion = request.getRequest().parseExpansion();
|
||||
Boolean useChannelContent = expansion.getBoolean(USE_CHANNEL_CONTENT);
|
||||
if (useChannelContent == null) useChannelContent = false;
|
||||
String templateContent = useChannelContent
|
||||
? request.getChannelTemplate().getTemplateContent()
|
||||
: request.getTemplate().getTemplateContent();
|
||||
String templateContent = request.getTemplate().getTemplateContent();
|
||||
String content = PlaceholderResolver.getDefaultResolver().resolveByMap(
|
||||
templateContent, request.getTemplateMap());
|
||||
String respStr = regulatoryGaoxinClient.send(request.getPhoneNo(), content);
|
||||
|
||||
@ -0,0 +1,125 @@
|
||||
package cn.axzo.msg.center.notices.manager;
|
||||
|
||||
import cn.axzo.basics.common.exception.ServiceException;
|
||||
import cn.axzo.msg.center.common.utils.PlaceholderResolver;
|
||||
import cn.axzo.msg.center.notices.manager.api.SmsSendManager;
|
||||
import cn.axzo.msg.center.notices.manager.api.dto.request.BatchMessageSendRequestDto;
|
||||
import cn.axzo.msg.center.notices.manager.api.dto.request.MessageSendRequestDto;
|
||||
import cn.axzo.msg.center.notices.manager.api.dto.response.BatchMessageSendResponseDto;
|
||||
import cn.axzo.msg.center.notices.manager.api.dto.response.SendSmsCommonResponseDto;
|
||||
import cn.hutool.crypto.digest.DigestUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.aliyun.oss.common.utils.HttpUtil;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import okhttp3.FormBody;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
/**
|
||||
* 政务: 龙泉
|
||||
*
|
||||
* @author yanglin
|
||||
*/
|
||||
@Slf4j
|
||||
@RefreshScope
|
||||
@RequiredArgsConstructor
|
||||
@Service("regulatoryLongquanManager")
|
||||
public class RegulatoryLongquanManager implements SmsSendManager {
|
||||
|
||||
private static final String URI = "http://182.151.56.200:9998/http/send";
|
||||
|
||||
private final OkHttpClient client = new OkHttpClient();
|
||||
@Value("${regulatory.longquan.appId:xliKSXxnAj3Oge2pw5rlsEsKAsD1a2fk}")
|
||||
private String appId;
|
||||
@Value("${regulatory.longquan.appKey:OgAEa9bFPJJc2XNLlVJCXlGvL5jDHdZb}")
|
||||
private String appKey;
|
||||
@Value("${regulatory.longquan.signName:【龙泉驿区住建局】}")
|
||||
private String signName;
|
||||
|
||||
@Override
|
||||
public SendSmsCommonResponseDto sendMessage(MessageSendRequestDto request) {
|
||||
try {
|
||||
log.info("[RegulatoryLongquanManager#sendMessage] -> 政务龙泉 - 发送sms {}", JSON.toJSONString(request));
|
||||
return sendImpl(request);
|
||||
} catch (Exception e) {
|
||||
log.warn("[RegulatoryLongquanManager#sendMessage] -> 政务龙泉 - 发送sms失败 {}", JSON.toJSONString(request), e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private SendSmsCommonResponseDto sendImpl(MessageSendRequestDto mnsRequest) throws Exception {
|
||||
String templateContent = mnsRequest.getTemplate().getTemplateContent();
|
||||
String content = PlaceholderResolver.getDefaultResolver().resolveByMap(
|
||||
templateContent, mnsRequest.getTemplateMap());
|
||||
String encodedMsg = HttpUtil.urlEncode(signName + content, "UTF-8");
|
||||
String md5Sign = DigestUtil.md5Hex(appId + mnsRequest.getPhoneNo() + encodedMsg + appKey);
|
||||
FormBody.Builder formBuilder = new FormBody.Builder();
|
||||
HashMap<String, Object> formParams = new HashMap<>();
|
||||
BiConsumer<String, String> formPopulator= (key, value) -> {
|
||||
formBuilder.add(key, value);
|
||||
formParams.put(key, value);
|
||||
};
|
||||
formPopulator.accept("appid", appId);
|
||||
formPopulator.accept("mobile", mnsRequest.getPhoneNo());
|
||||
formPopulator.accept("msg", encodedMsg);
|
||||
formPopulator.accept("sign", md5Sign);
|
||||
Request httpRequest = new Request.Builder()
|
||||
.url(URI)
|
||||
.post(formBuilder.build())
|
||||
.build();
|
||||
log.info("[RegulatoryLongquanManager#sendMessage] -> 政务龙泉 - 发送sms请求, formBody={}",
|
||||
JSON.toJSONString(formParams));
|
||||
LongquanResponse longquanResult = null;
|
||||
try (Response httpResponse = client.newCall(httpRequest).execute()) {
|
||||
ResponseBody body = httpResponse.body();
|
||||
if (body != null)
|
||||
longquanResult = JSON.parseObject(body.string(), LongquanResponse.class);
|
||||
log.info("[RegulatoryLongquanManager#sendMessage] -> 政务龙泉 - formBody: {}, 发送sms结果: {}",
|
||||
JSON.toJSONString(formParams), longquanResult);
|
||||
}
|
||||
if (longquanResult != null && !longquanResult.isSuccess())
|
||||
throw new ServiceException(String.format("政务龙泉 - 发送sms失败 %s. mnsRequest=%s, formBody=%s",
|
||||
longquanResult, JSON.toJSONString(mnsRequest), JSON.toJSONString(formParams)));
|
||||
SendSmsCommonResponseDto result = new SendSmsCommonResponseDto();
|
||||
if (longquanResult != null)
|
||||
result.setBizId(longquanResult.getTaskId());
|
||||
result.setRequestId(md5Sign);
|
||||
result.setMessage(longquanResult == null ? "" : longquanResult.getResultMsg());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BatchMessageSendResponseDto sendBatchMessage(BatchMessageSendRequestDto requestDto) {
|
||||
throw new UnsupportedOperationException("sendBatchMessage");
|
||||
}
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
private static class LongquanResponse {
|
||||
private int resultCode;
|
||||
private String resultMsg;
|
||||
@JSONField(name = "taskid")
|
||||
private String taskId;
|
||||
|
||||
public boolean isSuccess() {
|
||||
return resultCode == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -170,12 +170,13 @@ public class MessageServiceImpl implements MessageService, EnvironmentAware {
|
||||
dto.setChannelCode(message.getChannelCode());
|
||||
dto.setPhoneNo(message.getTargetAddress());
|
||||
dto.setInnerTemplateNo(messageTemplate.getTemplateNo());
|
||||
dto.setTemplateNo(channelTemplate.getTemplateNo());
|
||||
if (channelTemplate != null) {
|
||||
dto.setTemplateNo(channelTemplate.getTemplateNo());
|
||||
}
|
||||
dto.setTemplateMap(request.getParams());
|
||||
dto.setAppRequestNo(message.getRequestNo());
|
||||
dto.setRequestChannelNo(message.getMessageOrderNo());
|
||||
dto.setTemplate(messageTemplate);
|
||||
dto.setChannelTemplate(channelTemplate);
|
||||
dto.setRequest(request);
|
||||
SendSmsCommonResponseDto response = smsSendManagerComposite.sendMessage(dto);
|
||||
messageManager.updateToProcessing(response.getBizId(), response.getRequestId(), message.getId());
|
||||
|
||||
@ -69,7 +69,7 @@ public class SmsManager extends BaseManager implements SmsGateway {
|
||||
*/
|
||||
public int sendSmsCode(SendCodeV2Req req) {
|
||||
sendMnsCode(req.getPhone(), req.getParam(), req.getAppCode(),req.getTemplateNo(), req.getCode(), req.getExpansion());
|
||||
log.info("发送验证码 手机号{} -- 参数 {} -- 应用程序code {} -- 模板编号templateCode {}", req.getPhone(), req.getParam(), req.getAppCode(),req.getTemplateNo());
|
||||
log.info("发送验证码, request={}", req);
|
||||
return req.getCode();
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package cn.axzo.msg.center.notices.service.request;
|
||||
|
||||
import cn.axzo.msg.center.api.request.ExpansionInfo;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@ -32,4 +33,9 @@ public class SendCodeV2Req extends ExpansionInfo {
|
||||
private String appCode;
|
||||
@NotBlank(message = "templateNo参数不参为空")
|
||||
private String templateNo;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user