feat: 优化 IoT 告警模板选择

- 后端 mail/sms/notify 模板 simple-list 仅返回启用模板精简字段
- 前端补充 mail/sms/notify 模板 simple-list API 封装
- vue3 与 vben antd/ele 在各自 system 模块封装模板选择组件
- IoT 告警配置按接收类型动态选择短信、邮件、站内信模板
- 补充前端 IotAlertReceiveTypeEnum,替换表单内裸常量
This commit is contained in:
YunaiV
2026-05-30 22:06:02 +08:00
parent 8ba906c6eb
commit 5f2abdabbe
15 changed files with 115 additions and 22 deletions
@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.system.controller.admin.mail;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@@ -80,10 +81,11 @@ public class MailTemplateController {
return success(BeanUtils.toBean(pageResult, MailTemplateRespVO.class));
}
@GetMapping({"/list-all-simple", "simple-list"})
@Operation(summary = "获得邮件模版精简列表")
public CommonResult<List<MailTemplateSimpleRespVO>> getSimpleTemplateList() {
List<MailTemplateDO> list = mailTempleService.getMailTemplateList();
@GetMapping({"/list-all-simple", "/simple-list"})
@Operation(summary = "获得邮件模版精简列表", description = "只包含被开启的邮件模版,主要用于前端的下拉选项")
public CommonResult<List<MailTemplateSimpleRespVO>> getSimpleMailTemplateList() {
List<MailTemplateDO> list = mailTempleService.getMailTemplateListByStatus(
CommonStatusEnum.ENABLE.getStatus());
return success(BeanUtils.toBean(list, MailTemplateSimpleRespVO.class));
}
@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.system.controller.admin.notify;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
@@ -88,9 +89,10 @@ public class NotifyTemplateController {
}
@GetMapping({"/list-all-simple", "/simple-list"})
@Operation(summary = "获得站内信模版精简列表")
public CommonResult<List<NotifyTemplateSimpleRespVO>> getSimpleTemplateList() {
List<NotifyTemplateDO> list = notifyTemplateService.getNotifyTemplateList();
@Operation(summary = "获得站内信模版精简列表", description = "只包含被开启的站内信模版,主要用于前端的下拉选项")
public CommonResult<List<NotifyTemplateSimpleRespVO>> getSimpleNotifyTemplateList() {
List<NotifyTemplateDO> list = notifyTemplateService.getNotifyTemplateListByStatus(
CommonStatusEnum.ENABLE.getStatus());
return success(BeanUtils.toBean(list, NotifyTemplateSimpleRespVO.class));
}
@@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.system.controller.admin.sms;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
@@ -90,9 +91,10 @@ public class SmsTemplateController {
}
@GetMapping({"/list-all-simple", "/simple-list"})
@Operation(summary = "获得短信模板精简列表")
public CommonResult<List<SmsTemplateSimpleRespVO>> getSimpleTemplateList() {
List<SmsTemplateDO> list = smsTemplateService.getSmsTemplateList();
@Operation(summary = "获得短信模板精简列表", description = "只包含被开启的短信模板,主要用于前端的下拉选项")
public CommonResult<List<SmsTemplateSimpleRespVO>> getSimpleSmsTemplateList() {
List<SmsTemplateDO> list = smsTemplateService.getSmsTemplateListByStatus(
CommonStatusEnum.ENABLE.getStatus());
return success(BeanUtils.toBean(list, SmsTemplateSimpleRespVO.class));
}
@@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemp
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface MailTemplateMapper extends BaseMapperX<MailTemplateDO> {
@@ -28,4 +30,8 @@ public interface MailTemplateMapper extends BaseMapperX<MailTemplateDO> {
return selectOne(MailTemplateDO::getCode, code);
}
default List<MailTemplateDO> selectListByStatus(Integer status) {
return selectList(MailTemplateDO::getStatus, status);
}
}
@@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.Notify
import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface NotifyTemplateMapper extends BaseMapperX<NotifyTemplateDO> {
@@ -23,4 +25,8 @@ public interface NotifyTemplateMapper extends BaseMapperX<NotifyTemplateDO> {
.orderByDesc(NotifyTemplateDO::getId));
}
default List<NotifyTemplateDO> selectListByStatus(Integer status) {
return selectList(NotifyTemplateDO::getStatus, status);
}
}
@@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.SmsTempla
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface SmsTemplateMapper extends BaseMapperX<SmsTemplateDO> {
@@ -30,4 +32,8 @@ public interface SmsTemplateMapper extends BaseMapperX<SmsTemplateDO> {
return selectCount(SmsTemplateDO::getChannelId, channelId);
}
default List<SmsTemplateDO> selectListByStatus(Integer status) {
return selectList(SmsTemplateDO::getStatus, status);
}
}
@@ -69,6 +69,14 @@ public interface MailTemplateService {
*/
List<MailTemplateDO> getMailTemplateList();
/**
* 获取指定状态的邮件模版数组
*
* @param status 状态
* @return 邮件模版数组
*/
List<MailTemplateDO> getMailTemplateListByStatus(Integer status);
/**
* 从缓存中获取邮件模版
*
@@ -113,7 +113,9 @@ public class MailTemplateServiceImpl implements MailTemplateService {
}
@Override
public MailTemplateDO getMailTemplate(Long id) {return mailTemplateMapper.selectById(id);}
public MailTemplateDO getMailTemplate(Long id) {
return mailTemplateMapper.selectById(id);
}
@Override
@Cacheable(value = RedisKeyConstants.MAIL_TEMPLATE, key = "#code", unless = "#result == null")
@@ -127,7 +129,14 @@ public class MailTemplateServiceImpl implements MailTemplateService {
}
@Override
public List<MailTemplateDO> getMailTemplateList() {return mailTemplateMapper.selectList();}
public List<MailTemplateDO> getMailTemplateList() {
return mailTemplateMapper.selectList();
}
@Override
public List<MailTemplateDO> getMailTemplateListByStatus(Integer status) {
return mailTemplateMapper.selectListByStatus(status);
}
@Override
public String formatMailTemplateContent(String content, Map<String, Object> params) {
@@ -236,4 +245,4 @@ public class MailTemplateServiceImpl implements MailTemplateService {
return ReUtil.findAllGroup1(PATTERN_PARAMS, content);
}
}
}
@@ -70,11 +70,12 @@ public interface NotifyTemplateService {
PageResult<NotifyTemplateDO> getNotifyTemplatePage(NotifyTemplatePageReqVO pageReqVO);
/**
* 获得启用状态的站内信模版列表
* 获得指定状态的站内信模版列表
*
* @param status 状态
* @return 站内信模版列表
*/
List<NotifyTemplateDO> getNotifyTemplateList();
List<NotifyTemplateDO> getNotifyTemplateListByStatus(Integer status);
/**
* 格式化站内信内容
@@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.system.service.notify;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.notify.vo.template.NotifyTemplatePageReqVO;
@@ -117,8 +116,8 @@ public class NotifyTemplateServiceImpl implements NotifyTemplateService {
}
@Override
public List<NotifyTemplateDO> getNotifyTemplateList() {
return notifyTemplateMapper.selectList(NotifyTemplateDO::getStatus, CommonStatusEnum.ENABLE.getStatus());
public List<NotifyTemplateDO> getNotifyTemplateListByStatus(Integer status) {
return notifyTemplateMapper.selectListByStatus(status);
}
@VisibleForTesting
@@ -71,11 +71,12 @@ public interface SmsTemplateService {
PageResult<SmsTemplateDO> getSmsTemplatePage(SmsTemplatePageReqVO pageReqVO);
/**
* 获得启用状态的短信模板列表
* 获得指定状态的短信模板列表
*
* @param status 状态
* @return 短信模板列表
*/
List<SmsTemplateDO> getSmsTemplateList();
List<SmsTemplateDO> getSmsTemplateListByStatus(Integer status);
/**
* 获得指定短信渠道下的短信模板数量
@@ -131,8 +131,8 @@ public class SmsTemplateServiceImpl implements SmsTemplateService {
}
@Override
public List<SmsTemplateDO> getSmsTemplateList() {
return smsTemplateMapper.selectList(SmsTemplateDO::getStatus, CommonStatusEnum.ENABLE.getStatus());
public List<SmsTemplateDO> getSmsTemplateListByStatus(Integer status) {
return smsTemplateMapper.selectListByStatus(status);
}
@Override
@@ -156,6 +156,23 @@ public class MailTemplateServiceImplTest extends BaseDbUnitTest {
assertEquals(dbMailTemplate02, list.get(1));
}
@Test
public void testGetMailTemplateListByStatus() {
// mock 数据
MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class,
o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
mailTemplateMapper.insert(dbMailTemplate);
mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate,
o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
// 调用
List<MailTemplateDO> list = mailTemplateService.getMailTemplateListByStatus(
CommonStatusEnum.ENABLE.getStatus());
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbMailTemplate, list.get(0));
}
@Test
public void testGetMailTemplate() {
// mock 数据
@@ -12,6 +12,7 @@ import org.springframework.context.annotation.Import;
import jakarta.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
@@ -136,6 +137,23 @@ public class NotifyTemplateServiceImplTest extends BaseDbUnitTest {
assertPojoEquals(dbNotifyTemplate, pageResult.getList().get(0));
}
@Test
public void testGetNotifyTemplateListByStatus() {
// mock 数据
NotifyTemplateDO dbNotifyTemplate = randomPojo(NotifyTemplateDO.class,
o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
notifyTemplateMapper.insert(dbNotifyTemplate);
notifyTemplateMapper.insert(cloneIgnoreId(dbNotifyTemplate,
o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
// 调用
List<NotifyTemplateDO> list = notifyTemplateService.getNotifyTemplateListByStatus(
CommonStatusEnum.ENABLE.getStatus());
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbNotifyTemplate, list.get(0));
}
@Test
public void testGetNotifyTemplate() {
// mock 数据
@@ -244,6 +244,22 @@ public class SmsTemplateServiceImplTest extends BaseDbUnitTest {
assertPojoEquals(dbSmsTemplate, pageResult.getList().get(0));
}
@Test
public void testGetSmsTemplateListByStatus() {
// mock 数据
SmsTemplateDO dbSmsTemplate = randomSmsTemplateDO(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
smsTemplateMapper.insert(dbSmsTemplate);
smsTemplateMapper.insert(ObjectUtils.cloneIgnoreId(dbSmsTemplate,
o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
// 调用
List<SmsTemplateDO> list = smsTemplateService.getSmsTemplateListByStatus(
CommonStatusEnum.ENABLE.getStatus());
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbSmsTemplate, list.get(0));
}
@Test
public void testGetSmsTemplateCountByChannelId() {
// mock 数据