Merge branch 'master' into featrue/REQ-4018

This commit is contained in:
chenwenjian 2025-04-16 13:52:58 +08:00
commit 2c44ade37e
18 changed files with 420 additions and 61 deletions

View File

@ -1,5 +1,28 @@
package cn.axzo.msg.center.message.controller;
import static java.util.stream.Collectors.toMap;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.validation.Valid;
import org.springframework.cloud.bootstrap.config.BootstrapPropertySource;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertySource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.yaml.snakeyaml.DumperOptions;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
import cn.axzo.msg.center.api.MNSNoticesApi;
import cn.axzo.msg.center.api.MessageAPIV3;
import cn.axzo.msg.center.api.MessageAPIV4;
@ -35,31 +58,17 @@ import cn.axzo.msg.center.notices.manager.api.MessageChannelRouter;
import cn.axzo.msg.center.notices.manager.api.MessageTemplateManager;
import cn.axzo.msg.center.notices.manager.api.dto.request.plat.AddMnsAppRequest;
import cn.axzo.msg.center.notices.manager.api.dto.request.plat.CreateTemplateRequestDto;
import cn.axzo.msg.center.notices.manager.api.dto.request.plat.DeleteTemplateRequest;
import cn.axzo.msg.center.notices.manager.api.dto.request.plat.QueryTemplateRequestDto;
import cn.axzo.msg.center.notices.manager.api.dto.request.plat.TingyunInterfaceListRequest;
import cn.axzo.msg.center.notices.manager.api.dto.response.plat.QueryTemplateResponseDto;
import cn.axzo.msg.center.notices.service.api.PlatService;
import cn.axzo.msg.center.service.enums.MqMessageType;
import cn.axzo.msg.center.service.pending.request.ResendMessageRequest;
import cn.axzo.msg.center.service.pending.request.RevokeByTemplateCodeRequest;
import cn.axzo.trade.web.annotation.EnableResponseAdvice;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.bootstrap.config.BootstrapPropertySource;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertySource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.yaml.snakeyaml.DumperOptions;
import javax.validation.Valid;
import java.util.Map;
import static java.util.stream.Collectors.toMap;
/**
* @author syl
@ -196,6 +205,43 @@ public class PrivateMessageController {
return "created";
}
@PostMapping("/createMnsTemplates")
@EnableResponseAdvice(enable = false)
@Transactional(rollbackFor = Exception.class)
public Object createMnsTemplates(@RequestBody List<CreateTemplateRequestDto> requests){
HashMap<String, Object> result = new HashMap<>();
for (CreateTemplateRequestDto request : requests) {
QueryTemplateRequestDto query = new QueryTemplateRequestDto();
query.setChannelTemplateNo(request.getChannelTemplateCode());
query.setChannelCode(request.getChannel());
List<QueryTemplateResponseDto> saved = platService.list(query).getList();
if (saved.isEmpty()) {
log.info("saving template. innerTemplateNo={}, channelTemplateNo={}", request.getInnerTemplateNo(),
request.getChannelTemplateCode());
platService.createTemplate(request);
result.put(request.getChannelTemplateCode(), "创建成功");
}
else {
log.info("ignore saving template, it's present. innerTemplateNo={}, channelTemplateNo={}",
request.getInnerTemplateNo(), request.getChannelTemplateCode());
result.put(request.getChannelTemplateCode(), "已存在, 跳过");
}
}
return result;
}
@PostMapping("/deleteChannelTemplates")
@EnableResponseAdvice(enable = false)
@Transactional(rollbackFor = Exception.class)
public Object deleteChannelTemplates(@RequestBody List<DeleteTemplateRequest> requests){
HashMap<String, Object> result = new HashMap<>();
for (DeleteTemplateRequest request : requests) {
boolean deleted = platService.deleteChannelTemplate(request.getChannelTemplateCode(), request.getChannelCode());
result.put(request.getChannelTemplateCode(), deleted ? "已删除" : "不存在");
}
return result;
}
@PostMapping("/sendSms")
@EnableResponseAdvice(enable = false)
public Object sendSms(@RequestBody @Valid SendMessageRequestDto request) {

View File

@ -1,14 +1,15 @@
package cn.axzo.msg.center.domain.entity;
import cn.axzo.msg.center.domain.persistence.BaseOwnEntity;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import cn.axzo.msg.center.domain.persistence.BaseOwnEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* <p>
* 消息渠道表

View File

@ -1,5 +1,16 @@
package cn.axzo.msg.center.notices.client.handler;
import javax.annotation.Resource;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import cn.axzo.basics.common.exception.ServiceException;
import cn.axzo.msg.center.notices.common.enums.ReturnCodeEnum;
import cn.axzo.msg.center.notices.common.exception.BizException;
@ -7,14 +18,6 @@ import cn.axzo.msg.center.notices.integration.client.DingDingClient;
import cn.azxo.framework.common.model.CommonResponse;
import cn.azxo.framework.common.utils.LogUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.annotation.Resource;
/**
* Spring MVC 统一异常处理
@ -24,6 +27,7 @@ import javax.annotation.Resource;
* @since 2021-05-17 15:44
*/
@Slf4j
@Order(Ordered.HIGHEST_PRECEDENCE)
@RestControllerAdvice
public class ControllerExceptionHandler {
@ -42,6 +46,12 @@ public class ControllerExceptionHandler {
return CommonResponse.error(e.getErrorCode(), e.getMessage());
}
@ExceptionHandler(value = cn.axzo.framework.domain.ServiceException.class)
public CommonResponse bizException(cn.axzo.framework.domain.ServiceException e){
log.warn("[mns] ControllerExceptionHandler.bizException Exception", e);
return CommonResponse.error(9998, e.getMessage());
}
@ExceptionHandler(value = IllegalArgumentException.class)
public CommonResponse handleIllegalArgumentException(IllegalArgumentException e) {
LogUtil.error("[mns] ControllerExceptionHandler.handleIllegalArgumentException Exception message ", e);

View File

@ -23,7 +23,8 @@ public enum ChannelHandlerEnum implements EnumBase<String> {
SUB_MAIL("sub_mail", "subMailSmsSendManager", "赛邮"),
LIAN_LU("lian_lu", "lianLuSmsSendManager", "联麓"),
REGULATORY_GAOXIN("regulatory_gaoxin", "regulatoryGaoxinManager", "监管机构: 高新"),
REGULATORY_LONGQUAN("regulatory_longquan", "regulatoryLongquanManager", "监管机构: 龙泉")
REGULATORY_LONGQUAN("regulatory_longquan", "regulatoryLongquanManager", "监管机构: 龙泉"),
VOLC("volc", "volcManager", "火山云")
;
private final String code;

View File

@ -24,6 +24,7 @@ import com.aliyun.teautil.models.RuntimeOptions;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -38,6 +39,7 @@ import java.util.Optional;
* @since 2021-05-19 12:39
*/
@Slf4j
@RefreshScope
@Service("aliYunSmsClient")
public class AliYunSmsClientImpl implements AliYunSmsClient {

View File

@ -28,6 +28,8 @@ public interface SmsSendManager {
* @param requestDto
* @return
*/
BatchMessageSendResponseDto sendBatchMessage(BatchMessageSendRequestDto requestDto);
default BatchMessageSendResponseDto sendBatchMessage(BatchMessageSendRequestDto requestDto) {
return new BatchMessageSendResponseDto();
}
}

View File

@ -0,0 +1,21 @@
package cn.axzo.msg.center.notices.manager.api.dto.request.plat;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
/**
* @author yanglin
*/
@Setter
@Getter
public class DeleteTemplateRequest {
@NotBlank(message = "channelTemplateCode")
private String channelTemplateCode;
@NotBlank(message = "channelCode")
private String channelCode;
}

View File

@ -20,14 +20,16 @@ public class QueryTemplateRequestDto extends PageQuery<QueryTemplateRequestDto>
/**
* ali模版编码
*/
private String templateAliNo;
private String channelTemplateNo;
/**
* axzo模版编码
*/
private String templateNo;
private String innerTemplateNo;
/**
* 标题
*/
private String title;
private String channelCode;
}

View File

@ -20,6 +20,11 @@
</properties>
<dependencies>
<dependency>
<groupId>com.volcengine</groupId>
<artifactId>volc-sdk-java</artifactId>
<version>1.0.105</version>
</dependency>
<dependency>
<groupId>cn.axzo.msgcenter</groupId>
<artifactId>msg-center-common</artifactId>

View File

@ -1,5 +1,24 @@
package cn.axzo.msg.center.notices.manager;
import static java.util.stream.Collectors.toList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import cn.axzo.msg.center.api.request.AddMnsChannelRequest;
import cn.axzo.msg.center.dal.MNSMessageChannelDao;
import cn.axzo.msg.center.domain.entity.MNSMessageChannel;
@ -9,20 +28,8 @@ import cn.axzo.msg.center.notices.common.enums.ReturnCodeEnum;
import cn.axzo.msg.center.notices.common.exception.BizException;
import cn.axzo.msg.center.notices.manager.api.MessageChannelRouter;
import cn.axzo.msg.center.notices.manager.api.MessageTemplateManager;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import cn.axzo.msg.center.notices.manager.support.SmsFailoverProps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
/**
* 消息渠道路由实现类
@ -32,6 +39,7 @@ import java.util.Set;
* @since 2021-05-27 15:04
*/
@Slf4j
@RefreshScope
@Service("messageChannelRoute")
public class MessageChannelRouteImpl implements MessageChannelRouter {
@ -39,6 +47,8 @@ public class MessageChannelRouteImpl implements MessageChannelRouter {
private MNSMessageChannelDao mnsMessageChannelDao;
@Resource(name = "messageTemplateManager")
private MessageTemplateManager messageTemplateManager;
@Resource
private SmsFailoverProps failoverProps;
@Override
public MNSMessageChannel route(String condition) {
@ -70,13 +80,23 @@ public class MessageChannelRouteImpl implements MessageChannelRouter {
pickChannelCodes.clear();
pickChannelCodes.add(specifyChannelCode);
}
// 查询优先级最高的一个
return messageChannels.stream()
List<MNSMessageChannel> validChannels = messageChannels.stream()
// 条件过滤
.filter(messageChannel -> pickChannelCodes.contains(messageChannel.getChannelCode()))
.collect(toList());
// 查询优先级最高的一个
MNSMessageChannel selectedChannel = validChannels.stream()
// 优先级越小,排在越前
.min(Comparator.comparing(MNSMessageChannel::getPriority))
.orElse(null);
MNSMessageChannel failoverChannel = validChannels.stream()
.filter(c -> c.getChannelCode().equals(failoverProps.getFailoverChannel()))
.findFirst()
.orElse(null);
boolean failover = StringUtils.isNotBlank(failoverProps.getFailoverChannel())
&& (failoverProps.isGlobal() || failoverProps.getIncludeInnerTemplates().contains(innerTemplateCode))
&& !failoverProps.getExcludeInnerTemplates().contains(innerTemplateCode);
return failover && failoverChannel != null ? failoverChannel : selectedChannel;
}
@Override

View File

@ -0,0 +1,83 @@
package cn.axzo.msg.center.notices.manager;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.volcengine.model.request.SmsSendRequest;
import com.volcengine.model.response.SmsSendResponse;
import com.volcengine.service.sms.SmsService;
import com.volcengine.service.sms.SmsServiceInfoConfig;
import com.volcengine.service.sms.impl.SmsServiceImpl;
import cn.axzo.msg.center.common.exception.ServiceException;
import cn.axzo.msg.center.notices.manager.api.SmsSendManager;
import cn.axzo.msg.center.notices.manager.api.dto.request.MessageSendRequestDto;
import cn.axzo.msg.center.notices.manager.api.dto.response.SendSmsCommonResponseDto;
import cn.axzo.msg.center.notices.manager.support.VolcSmsProps;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* https://www.volcengine.com/docs/6361/173288
* https://www.volcengine.com/docs/6361/173291
*
* @author yanglin
*/
@Slf4j
@RequiredArgsConstructor
@Service("volcManager")
public class VolcManager implements SmsSendManager, InitializingBean {
private final VolcSmsProps props;
private SmsService smsService;
@Override
public SendSmsCommonResponseDto sendMessage(MessageSendRequestDto requestDto) {
SmsSendRequest volcRequest = new SmsSendRequest();
volcRequest.setPhoneNumbers(requestDto.getPhoneNo());
volcRequest.setSmsAccount(props.getGroupId());
volcRequest.setTemplateId(requestDto.getTemplateNo());
volcRequest.setSign(props.getSign());
Map<String, String> effectiveParam = new HashMap<>();
if (requestDto.getTemplateMap() != null) {
for (Map.Entry<String, Object> e : requestDto.getTemplateMap().entrySet()) {
if (e.getKey() == null || e.getValue() == null)
continue;
effectiveParam.put(e.getKey(), String.valueOf(e.getValue()));
}
}
volcRequest.setTemplateParamByMap(effectiveParam);
try {
log.info("[VolcManager#sendMessage] 开始发送sms, request={}", volcRequest);
SmsSendResponse volcResponse = smsService.sendV2(volcRequest);
log.info("[VolcManager#sendMessage] 结束发送sms, request={}, response={}", volcRequest, volcResponse);
if (StringUtils.isBlank(volcResponse.getCode())) {
SendSmsCommonResponseDto result = new SendSmsCommonResponseDto();
result.setBizId(volcResponse.getResult().getMessageId().get(0));
result.setRequestId(volcResponse.getResponseMetadata().getRequestId());
result.setMessage(result.getMessage());
return result;
}
throw new ServiceException(
"发送短信失败, request=" + JSON.toJSONString(volcRequest) + ", response=" + JSON.toJSONString(volcResponse));
}
catch (Exception e) {
throw new ServiceException(e);
}
}
@Override
public void afterPropertiesSet() {
smsService = SmsServiceImpl.getInstance(
new SmsServiceInfoConfig(props.getAccessKey(), props.getSecretAccessKey()));
}
}

View File

@ -0,0 +1,31 @@
package cn.axzo.msg.center.notices.manager.support;
import java.util.Collections;
import java.util.Set;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import lombok.Getter;
import lombok.Setter;
/**
* @author yanglin
*/
@Setter
@Getter
@RefreshScope
@Configuration
@ConfigurationProperties(prefix = "sms.failover")
public class SmsFailoverProps {
private boolean global = false;
private String failoverChannel = "volc";
private Set<String> includeInnerTemplates = Collections.emptySet();
private Set<String> excludeInnerTemplates = Collections.emptySet();
}

View File

@ -0,0 +1,25 @@
package cn.axzo.msg.center.notices.manager.support;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import lombok.Getter;
import lombok.Setter;
/**
* @author yanglin
*/
@Setter
@Getter
@RefreshScope
@Configuration
@ConfigurationProperties(prefix = "sms.volc")
public class VolcSmsProps {
private String accessKey = "AKLTZWMwNzI4OWZmYmRjNGJhZDgzMzNmZWM4Y2QzODRkZjA";
private String secretAccessKey = "Wmpnek1tWTFaRGhtTmpaak5EVTNZbUkxTXpsak1UUmlZV0ZpWW1Fek1tUQ==";
private String groupId = "8349906e";
private String sign = "安心筑";
}

View File

@ -29,6 +29,8 @@ public interface PlatService {
*/
Page<QueryTemplateResponseDto> list(QueryTemplateRequestDto request);
boolean deleteChannelTemplate(String channelTemplateNo, String channelCode);
/*
* 删除短信模板
*/

View File

@ -1,7 +1,23 @@
package cn.axzo.msg.center.notices.service.impl;
import static cn.axzo.basics.common.util.Queries.query;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import cn.axzo.msg.center.common.enums.TableIsDeleteEnum;
import cn.axzo.msg.center.common.utils.PlaceholderResolver;
import cn.axzo.msg.center.dal.MNSChannelMessageTemplateDao;
import cn.axzo.msg.center.dal.MNSMessageTemplateParamDao;
import cn.axzo.msg.center.dal.mapper.MNSChannelMessageTemplateMapper;
import cn.axzo.msg.center.dal.mapper.MNSMessageAppMapper;
@ -20,19 +36,7 @@ import cn.axzo.msg.center.notices.manager.api.dto.request.plat.CreateTemplateReq
import cn.axzo.msg.center.notices.manager.api.dto.request.plat.QueryTemplateRequestDto;
import cn.axzo.msg.center.notices.manager.api.dto.response.plat.QueryTemplateResponseDto;
import cn.axzo.msg.center.notices.service.api.PlatService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
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;
import static cn.axzo.basics.common.util.Queries.query;
@Slf4j
@Service("platService")
@ -41,6 +45,9 @@ public class PlatServiceImpl implements PlatService {
@Resource
private MNSChannelMessageTemplateMapper mnsChannelMessageTemplateMapper;
@Resource
private MNSChannelMessageTemplateDao mnsChannelMessageTemplateDao;
@Resource
private MNSMessageTemplateMapper mnsMessageTemplateMapper;
@ -229,9 +236,10 @@ public class PlatServiceImpl implements PlatService {
// 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());
queryWrapper.like(StringUtils.isNoneBlank(request.getTemplateNo()), MNSChannelMessageTemplate::getInnerTemplateNo, request.getTemplateNo());
queryWrapper.like(StringUtils.isNoneBlank(request.getChannelTemplateNo()), MNSChannelMessageTemplate::getTemplateNo, request.getChannelTemplateNo());
queryWrapper.like(StringUtils.isNoneBlank(request.getInnerTemplateNo()), MNSChannelMessageTemplate::getInnerTemplateNo, request.getInnerTemplateNo());
queryWrapper.like(StringUtils.isNoneBlank(request.getTitle()), MNSChannelMessageTemplate::getTitle, request.getTitle());
queryWrapper.eq(StringUtils.isNotBlank(request.getChannelCode()), MNSChannelMessageTemplate::getChannelCode, request.getChannelCode());
queryWrapper.orderByDesc(MNSChannelMessageTemplate::getCreateAt);
com.baomidou.mybatisplus.extension.plugins.pagination.Page<MNSChannelMessageTemplate> page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>();
@ -259,6 +267,14 @@ public class PlatServiceImpl implements PlatService {
return result;
}
@Override
public boolean deleteChannelTemplate(String channelTemplateNo, String channelCode) {
return mnsChannelMessageTemplateDao.lambdaUpdate()
.eq(MNSChannelMessageTemplate::getTemplateNo, channelTemplateNo)
.eq(MNSChannelMessageTemplate::getChannelCode, channelCode)
.remove();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(String templateNo) {

View File

@ -19,6 +19,10 @@
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.msgcenter</groupId>
<artifactId>msg-center-webapi</artifactId>

View File

@ -0,0 +1,63 @@
package cn.axzo.msg.center.notices.manager;
import java.util.ArrayList;
import org.junit.jupiter.api.Test;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.fastjson.JSONObject;
import lombok.Getter;
import lombok.Setter;
/**
* @author yanglin
*/
public class VolcImportTest {
@Test
void gen() {
String filePath = "/Users/yanglin/Desktop/1.xlsx";
ArrayList<JSONObject> templates = new ArrayList<>();
EasyExcel.read(filePath, Row.class, new ReadListener<Row>() {
@Override public void invoke(Row row, AnalysisContext context) {
JSONObject template = new JSONObject();
template.put("serviceName", "add");
template.put("messageTemplateType", 1);
template.put("innerTemplateNo", row.getInnerTemplateNo());
template.put("channelTemplateCode", row.getVolcTemplateNo());
template.put("title", row.getTitle());
template.put("templateContent", row.getContent());
template.put("remark", "");
template.put("channel", "volc");
templates.add(template);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
}).sheet().doRead();
System.out.println(templates);
}
@Setter @Getter
public static class Row {
@ExcelProperty(index = 0)
private String innerTemplateNo;
@ExcelProperty(index = 1)
private String aliyunTemplateNo;
@ExcelProperty(index = 2)
private String volcTemplateNo;
@ExcelProperty(index = 3)
private String volcRemark;
@ExcelProperty(index = 4)
private String templateType;
@ExcelProperty(index = 5)
private String title;
@ExcelProperty(index = 6)
private String content;
}
}

View File

@ -0,0 +1,25 @@
package cn.axzo.msg.center.notices.manager;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import cn.axzo.msg.center.MsgCenterApplication;
import lombok.RequiredArgsConstructor;
/**
* @author yanglin
*/
@SpringBootTest(classes = MsgCenterApplication.class)
@RequiredArgsConstructor(onConstructor_ = @Autowired)
class VolcManagerTest {
@Test
void exec() throws Exception {
}
@Test
void volcSend() {
}
}