feat(feature/REQ-1139)

背景:
  短信新对接渠道

修改:
  对接联麓渠道

影响:
  无
This commit is contained in:
luofu 2023-09-07 19:24:56 +08:00
parent b2c50ad853
commit 9f0d5d74bd
3 changed files with 86 additions and 17 deletions

View File

@ -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;
}
}

View File

@ -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()) {

View File

@ -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());