feat(feature/REQ-1139)
背景: 短信新对接渠道 修改: 对接联麓渠道 影响: 无
This commit is contained in:
parent
b2c50ad853
commit
9f0d5d74bd
@ -1,9 +1,8 @@
|
||||
package cn.axzo.msg.center.common.utils;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import org.apache.commons.compress.utils.Lists;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@ -190,4 +189,29 @@ public class PlaceholderResolver {
|
||||
return resolveByRule(content, placeholderValue -> String.valueOf(
|
||||
ReflectionUtils.getValueByFieldPath(obj, placeholderValue)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析带有指定占位符的模板字符串参数名称<br/><br/> 如: template = 您所在的${projectName}有工资发薪${state}<br/> 返回 Set<String>
|
||||
* = ["projectName", "state"]
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<String> resolveSequenceParamName(String content) {
|
||||
List<String> paramNames = Lists.newArrayList();
|
||||
int start = content.indexOf(this.placeholderPrefix);
|
||||
if (start == -1) {
|
||||
return paramNames;
|
||||
}
|
||||
StringBuilder result = new StringBuilder(content);
|
||||
while (start != -1) {
|
||||
int end = result.indexOf(this.placeholderSuffix, start);
|
||||
//获取占位符属性值,如${id}, 即获取id
|
||||
String placeholder = result.substring(start + this.placeholderPrefix.length(), end);
|
||||
paramNames.add(placeholder);
|
||||
//替换整个占位符内容,即将${id}值替换为替换规则回调中的内容
|
||||
result.replace(start, end + this.placeholderSuffix.length(), "");
|
||||
start = result.indexOf(this.placeholderPrefix, start);
|
||||
}
|
||||
return paramNames;
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,14 +18,15 @@ public enum ChannelHandlerEnum implements EnumBase<String> {
|
||||
/**
|
||||
* 渠道对应处理类
|
||||
*/
|
||||
ALI_YUN("aliyun", "aliyunSmsSendManager"),
|
||||
CHUANG_LAN("chuanglan", "chuangLanSmsSendManager"),
|
||||
SUB_MAIL("sub_mail", "subMailSmsSendManager"),
|
||||
LIAN_LU("lian_lu", "lianLuSmsSendManager"),
|
||||
ALI_YUN("aliyun", "aliyunSmsSendManager", "阿里云"),
|
||||
CHUANG_LAN("chuanglan", "chuangLanSmsSendManager", "创蓝"),
|
||||
SUB_MAIL("sub_mail", "subMailSmsSendManager", "赛邮"),
|
||||
LIAN_LU("lian_lu", "lianLuSmsSendManager", "联麓"),
|
||||
;
|
||||
|
||||
private final String code;
|
||||
private final String message;
|
||||
private final String desc;
|
||||
|
||||
public static ChannelHandlerEnum getByCode(String code) {
|
||||
for (ChannelHandlerEnum value : ChannelHandlerEnum.values()) {
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
package cn.axzo.msg.center.notices.service.impl;
|
||||
|
||||
import cn.axzo.msg.center.common.utils.PlaceholderResolver;
|
||||
import cn.axzo.msg.center.dal.MNSMessageTemplateParamDao;
|
||||
import cn.axzo.msg.center.dal.mapper.MNSChannelMessageTemplateMapper;
|
||||
import cn.axzo.msg.center.dal.mapper.MNSMessageAppMapper;
|
||||
import cn.axzo.msg.center.dal.mapper.MNSMessageTemplateMapper;
|
||||
import cn.axzo.msg.center.domain.entity.MNSChannelMessageTemplate;
|
||||
import cn.axzo.msg.center.domain.entity.MNSMessageApp;
|
||||
import cn.axzo.msg.center.domain.entity.MNSMessageTemplate;
|
||||
import cn.axzo.msg.center.domain.entity.MNSMessageTemplateParam;
|
||||
import cn.axzo.msg.center.notices.common.enums.ChannelHandlerEnum;
|
||||
import cn.axzo.msg.center.notices.common.enums.ReturnCodeEnum;
|
||||
import cn.axzo.msg.center.notices.common.exception.BizException;
|
||||
@ -23,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@ -38,20 +42,40 @@ public class PlatServiceImpl implements PlatService {
|
||||
@Resource
|
||||
private MNSMessageAppMapper mnsMessageAppMapper;
|
||||
|
||||
@Resource
|
||||
private MNSMessageTemplateParamDao mnsMessageTemplateParamDao;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createTemplate(CreateTemplateRequestDto request) {
|
||||
// FIXME: 临时方案,将渠道信息放到remark中
|
||||
String remark = request.getRemark();
|
||||
ChannelHandlerEnum channel = parseChannel(remark);
|
||||
checkCreateTemplate(request, channel);
|
||||
|
||||
checkCreateTemplate(request);
|
||||
if (StringUtils.isNotBlank(remark)) {
|
||||
// 恢复remark的原始值
|
||||
request.setRemark(PlaceholderResolver.getDefaultResolver().resolve(remark, ""));
|
||||
}
|
||||
|
||||
insertMessageApp(request.getServiceName());
|
||||
|
||||
insertMessageTemplate(request);
|
||||
|
||||
insertChannelMessageTemplate(request);
|
||||
insertChannelMessageTemplate(request, channel);
|
||||
|
||||
insertMessageTemplateParam(request.getTemplateAliNo(), request.getTemplateContent());
|
||||
}
|
||||
|
||||
private ChannelHandlerEnum parseChannel(String expStr) {
|
||||
if (StringUtils.isBlank(expStr)) {
|
||||
return ChannelHandlerEnum.ALI_YUN;
|
||||
}
|
||||
// FIXME:临时方案,后期有前端资源的时候需要改造接口的出入参
|
||||
return ChannelHandlerEnum.valueOf(
|
||||
PlaceholderResolver.getDefaultResolver().resolveSequenceParamName(expStr).get(0)
|
||||
);
|
||||
}
|
||||
/**
|
||||
* 插入app
|
||||
*/
|
||||
@ -72,7 +96,7 @@ public class PlatServiceImpl implements PlatService {
|
||||
/**
|
||||
* 参数校验
|
||||
*/
|
||||
private void checkCreateTemplate(CreateTemplateRequestDto request) {
|
||||
private void checkCreateTemplate(CreateTemplateRequestDto request, ChannelHandlerEnum channel) {
|
||||
if(request == null){
|
||||
throw new BizException(ReturnCodeEnum.FAIL,"参数不能为空");
|
||||
}
|
||||
@ -96,8 +120,7 @@ public class PlatServiceImpl implements PlatService {
|
||||
}
|
||||
// 判断短信编码是否存在
|
||||
LambdaQueryWrapper<MNSChannelMessageTemplate> queryWrapper = new LambdaQueryWrapper<>();
|
||||
// TODO: [cold_blade] 注意渠道编码的问题
|
||||
queryWrapper.eq(MNSChannelMessageTemplate::getChannelCode, ChannelHandlerEnum.ALI_YUN.getCode());
|
||||
queryWrapper.eq(MNSChannelMessageTemplate::getChannelCode, channel.getCode());
|
||||
queryWrapper.eq(MNSChannelMessageTemplate::getTemplateNo, request.getTemplateAliNo());
|
||||
queryWrapper.or().eq(MNSChannelMessageTemplate::getInnerTemplateNo, request.getTemplateNo());
|
||||
List<MNSChannelMessageTemplate> list = mnsChannelMessageTemplateMapper.selectList(queryWrapper);
|
||||
@ -130,12 +153,12 @@ public class PlatServiceImpl implements PlatService {
|
||||
/**
|
||||
* 插入 ChannelMessageTemplate
|
||||
*/
|
||||
private void insertChannelMessageTemplate(CreateTemplateRequestDto request) {
|
||||
private void insertChannelMessageTemplate(CreateTemplateRequestDto request, ChannelHandlerEnum channel) {
|
||||
MNSChannelMessageTemplate channelMessageTemplate = new MNSChannelMessageTemplate();
|
||||
channelMessageTemplate.setInnerTemplateNo(request.getTemplateNo());
|
||||
channelMessageTemplate.setTemplateNo(request.getTemplateAliNo());
|
||||
channelMessageTemplate.setChannelCode("aliyun");
|
||||
channelMessageTemplate.setChannelName("阿里云");
|
||||
channelMessageTemplate.setChannelCode(channel.getCode());
|
||||
channelMessageTemplate.setChannelName(channel.getDesc());
|
||||
channelMessageTemplate.setTitle(request.getTitle());
|
||||
channelMessageTemplate.setTemplateContent(request.getTemplateContent());
|
||||
channelMessageTemplate.setType(request.getMessageTemplateType());
|
||||
@ -146,6 +169,27 @@ public class PlatServiceImpl implements PlatService {
|
||||
mnsChannelMessageTemplateMapper.insert(channelMessageTemplate);
|
||||
}
|
||||
|
||||
private void insertMessageTemplateParam(String channelTemplateCode, String templateContent) {
|
||||
PlaceholderResolver placeholderResolver = PlaceholderResolver.getDefaultResolver();
|
||||
List<String> paramNames = placeholderResolver.resolveSequenceParamName(templateContent);
|
||||
if (CollectionUtils.isEmpty(paramNames)) {
|
||||
return;
|
||||
}
|
||||
final AtomicInteger order = new AtomicInteger(1);
|
||||
List<MNSMessageTemplateParam> params = paramNames.stream()
|
||||
.map(e -> {
|
||||
MNSMessageTemplateParam templateParam = new MNSMessageTemplateParam();
|
||||
templateParam.setTemplateNo(channelTemplateCode);
|
||||
templateParam.setParamName(e);
|
||||
templateParam.setParamDesc(e);
|
||||
templateParam.setRemark(e);
|
||||
templateParam.setParamOrder(order.getAndIncrement());
|
||||
return templateParam;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
mnsMessageTemplateParamDao.saveBatch(params);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public QueryTemplateResponseDto getByTemplateNo(String templateNo) {
|
||||
@ -172,7 +216,7 @@ public class PlatServiceImpl implements PlatService {
|
||||
public Page<QueryTemplateResponseDto> list(QueryTemplateRequestDto request) {
|
||||
// TODO: [cold_blade] 这里渠道编码应该作为一个入参而非写死
|
||||
LambdaQueryWrapper<MNSChannelMessageTemplate> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(MNSChannelMessageTemplate::getChannelCode, ChannelHandlerEnum.ALI_YUN.getCode());
|
||||
// queryWrapper.eq(MNSChannelMessageTemplate::getChannelCode, ChannelHandlerEnum.ALI_YUN.getCode());
|
||||
queryWrapper.eq(request.getMessageTemplateType() != null, MNSChannelMessageTemplate::getType, request.getMessageTemplateType());
|
||||
queryWrapper.like(StringUtils.isNoneBlank(request.getServiceName()), MNSChannelMessageTemplate::getInnerTemplateNo, request.getServiceName());
|
||||
queryWrapper.like(StringUtils.isNoneBlank(request.getTemplateAliNo()), MNSChannelMessageTemplate::getTemplateNo, request.getTemplateAliNo());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user