feat(sj_1.0.0): 通知配置添加删除接口

This commit is contained in:
opensnail 2024-05-05 09:19:39 +08:00
parent 6a1196d0e0
commit 97237ac538
11 changed files with 54 additions and 18 deletions

View File

@ -78,6 +78,7 @@ public class EmailAlarm extends AbstractAlarm<AlarmContext> {
} }
mailAccount = initMailAccount(mailProperties); mailAccount = initMailAccount(mailProperties);
MailUtils.setMailAccount(mailAccount);
} }
private MailAccount initMailAccount(MailProperties mailProperties) { private MailAccount initMailAccount(MailProperties mailProperties) {

View File

@ -5,7 +5,6 @@ import cn.hutool.core.io.IoUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.aizuda.snailjob.common.core.context.SpringContext;
import com.aizuda.snailjob.common.core.alarm.email.Mail; import com.aizuda.snailjob.common.core.alarm.email.Mail;
import com.aizuda.snailjob.common.core.alarm.email.MailAccount; import com.aizuda.snailjob.common.core.alarm.email.MailAccount;
import com.aizuda.snailjob.common.core.alarm.email.UserPassAuthenticator; import com.aizuda.snailjob.common.core.alarm.email.UserPassAuthenticator;
@ -27,13 +26,20 @@ import java.util.Map;
@NoArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor(access = AccessLevel.PRIVATE)
public class MailUtils { public class MailUtils {
private static final MailAccount ACCOUNT = SpringContext.getBean(MailAccount.class); private static MailAccount account;
/** /**
* 获取邮件发送实例 * 获取邮件发送实例
*/ */
public static MailAccount getMailAccount() { public static MailAccount getMailAccount() {
return ACCOUNT; return account;
}
/**
* 获取邮件发送实例
*/
public static void setMailAccount(MailAccount account) {
MailUtils.account = account;
} }
/** /**
@ -43,10 +49,10 @@ public class MailUtils {
* @param pass 授权码 * @param pass 授权码
*/ */
public static MailAccount getMailAccount(String from, String user, String pass) { public static MailAccount getMailAccount(String from, String user, String pass) {
ACCOUNT.setFrom(StrUtil.blankToDefault(from, ACCOUNT.getFrom())); account.setFrom(StrUtil.blankToDefault(from, account.getFrom()));
ACCOUNT.setUser(StrUtil.blankToDefault(user, ACCOUNT.getUser())); account.setUser(StrUtil.blankToDefault(user, account.getUser()));
ACCOUNT.setPass(StrUtil.blankToDefault(pass, ACCOUNT.getPass())); account.setPass(StrUtil.blankToDefault(pass, account.getPass()));
return ACCOUNT; return account;
} }
/** /**

View File

@ -1,7 +1,5 @@
package com.aizuda.snailjob.server.retry.task.dto; package com.aizuda.snailjob.server.retry.task.dto;
import com.aizuda.snailjob.server.common.dto.NotifyConfigInfo;
import com.aizuda.snailjob.server.common.dto.NotifyConfigInfo.RecipientInfo;
import com.aizuda.snailjob.server.common.dto.PartitionTask; import com.aizuda.snailjob.server.common.dto.PartitionTask;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -18,12 +16,11 @@ import java.util.Set;
@Data @Data
public class NotifyConfigPartitionTask extends PartitionTask { public class NotifyConfigPartitionTask extends PartitionTask {
private String namespaceId; private String namespaceId;
private String groupName; private String groupName;
private String sceneName; private String businessId;
private Set<Long> recipientIds; private Set<Long> recipientIds;

View File

@ -96,7 +96,7 @@ public class RetryErrorMoreThresholdAlarmSchedule extends AbstractSchedule imple
new LambdaQueryWrapper<RetryDeadLetter>(). new LambdaQueryWrapper<RetryDeadLetter>().
between(RetryDeadLetter::getCreateDt, now.minusMinutes(30), now) between(RetryDeadLetter::getCreateDt, now.minusMinutes(30), now)
.eq(RetryDeadLetter::getGroupName, partitionTask.getGroupName()) .eq(RetryDeadLetter::getGroupName, partitionTask.getGroupName())
.eq(RetryDeadLetter::getSceneName, partitionTask.getSceneName())); .eq(RetryDeadLetter::getSceneName, partitionTask.getBusinessId()));
if (count >= partitionTask.getNotifyThreshold()) { if (count >= partitionTask.getNotifyThreshold()) {
List<RecipientInfo> recipientInfos = partitionTask.getRecipientInfos(); List<RecipientInfo> recipientInfos = partitionTask.getRecipientInfos();
for (final RecipientInfo recipientInfo : recipientInfos) { for (final RecipientInfo recipientInfo : recipientInfos) {
@ -110,7 +110,7 @@ public class RetryErrorMoreThresholdAlarmSchedule extends AbstractSchedule imple
count, count,
partitionTask.getNamespaceId(), partitionTask.getNamespaceId(),
partitionTask.getGroupName(), partitionTask.getGroupName(),
partitionTask.getSceneName(), partitionTask.getBusinessId(),
DateUtils.format(now.minusMinutes(30), DateUtils.format(now.minusMinutes(30),
DateUtils.NORM_DATETIME_PATTERN), DateUtils.NORM_DATETIME_PATTERN),
DateUtils.toNowFormat(DateUtils.NORM_DATETIME_PATTERN), count) DateUtils.toNowFormat(DateUtils.NORM_DATETIME_PATTERN), count)

View File

@ -1,6 +1,5 @@
package com.aizuda.snailjob.server.retry.task.support.schedule; package com.aizuda.snailjob.server.retry.task.support.schedule;
import com.aizuda.snailjob.common.core.alarm.Alarm;
import com.aizuda.snailjob.common.core.alarm.AlarmContext; import com.aizuda.snailjob.common.core.alarm.AlarmContext;
import com.aizuda.snailjob.common.core.alarm.SnailJobAlarmFactory; import com.aizuda.snailjob.common.core.alarm.SnailJobAlarmFactory;
import com.aizuda.snailjob.common.core.enums.RetryNotifySceneEnum; import com.aizuda.snailjob.common.core.enums.RetryNotifySceneEnum;
@ -10,6 +9,7 @@ import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.core.util.EnvironmentUtils; import com.aizuda.snailjob.common.core.util.EnvironmentUtils;
import com.aizuda.snailjob.server.common.Lifecycle; import com.aizuda.snailjob.server.common.Lifecycle;
import com.aizuda.snailjob.server.common.dto.PartitionTask; import com.aizuda.snailjob.server.common.dto.PartitionTask;
import com.aizuda.snailjob.server.common.enums.SyetemTaskTypeEnum;
import com.aizuda.snailjob.server.common.schedule.AbstractSchedule; import com.aizuda.snailjob.server.common.schedule.AbstractSchedule;
import com.aizuda.snailjob.server.common.util.DateUtils; import com.aizuda.snailjob.server.common.util.DateUtils;
import com.aizuda.snailjob.server.common.util.PartitionTaskUtils; import com.aizuda.snailjob.server.common.util.PartitionTaskUtils;
@ -89,7 +89,7 @@ public class RetryTaskMoreThresholdAlarmSchedule extends AbstractSchedule implem
new LambdaQueryWrapper<RetryTask>() new LambdaQueryWrapper<RetryTask>()
.eq(RetryTask::getNamespaceId, partitionTask.getNamespaceId()) .eq(RetryTask::getNamespaceId, partitionTask.getNamespaceId())
.eq(RetryTask::getGroupName, partitionTask.getGroupName()) .eq(RetryTask::getGroupName, partitionTask.getGroupName())
.eq(RetryTask::getSceneName, partitionTask.getSceneName()) .eq(RetryTask::getSceneName, partitionTask.getBusinessId())
.eq(RetryTask::getRetryStatus, RetryStatusEnum.RUNNING.getStatus())); .eq(RetryTask::getRetryStatus, RetryStatusEnum.RUNNING.getStatus()));
if (count >= partitionTask.getNotifyThreshold()) { if (count >= partitionTask.getNotifyThreshold()) {
@ -105,7 +105,7 @@ public class RetryTaskMoreThresholdAlarmSchedule extends AbstractSchedule implem
count, count,
partitionTask.getNamespaceId(), partitionTask.getNamespaceId(),
partitionTask.getGroupName(), partitionTask.getGroupName(),
partitionTask.getSceneName(), partitionTask.getBusinessId(),
DateUtils.toNowFormat(DateUtils.NORM_DATETIME_PATTERN), DateUtils.toNowFormat(DateUtils.NORM_DATETIME_PATTERN),
count) count)
.title("{}环境 场景重试数量超过阈值", EnvironmentUtils.getActiveProfile()) .title("{}环境 场景重试数量超过阈值", EnvironmentUtils.getActiveProfile())
@ -123,6 +123,7 @@ public class RetryTaskMoreThresholdAlarmSchedule extends AbstractSchedule implem
List<NotifyConfig> notifyConfigs = accessTemplate.getNotifyConfigAccess() List<NotifyConfig> notifyConfigs = accessTemplate.getNotifyConfigAccess()
.listPage(new PageDTO<>(startId, 1000), new LambdaQueryWrapper<NotifyConfig>() .listPage(new PageDTO<>(startId, 1000), new LambdaQueryWrapper<NotifyConfig>()
.eq(NotifyConfig::getNotifyStatus, StatusEnum.YES.getStatus()) .eq(NotifyConfig::getNotifyStatus, StatusEnum.YES.getStatus())
.eq(NotifyConfig::getSystemTaskType, SyetemTaskTypeEnum.RETRY.getType())
.eq(NotifyConfig::getNotifyScene, RetryNotifySceneEnum.MAX_RETRY.getNotifyScene()) .eq(NotifyConfig::getNotifyScene, RetryNotifySceneEnum.MAX_RETRY.getNotifyScene())
.orderByDesc(NotifyConfig::getId)) // SQLServer 分页必须 ORDER BY .orderByDesc(NotifyConfig::getId)) // SQLServer 分页必须 ORDER BY
.getRecords(); .getRecords();

View File

@ -11,6 +11,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* 通知配置接口 * 通知配置接口
@ -36,7 +37,6 @@ public class NotifyConfigController {
return notifyConfigService.getNotifyConfigDetail(id); return notifyConfigService.getNotifyConfigDetail(id);
} }
@LoginRequired @LoginRequired
@PostMapping @PostMapping
public Boolean saveNotify(@RequestBody @Validated NotifyConfigRequestVO requestVO) { public Boolean saveNotify(@RequestBody @Validated NotifyConfigRequestVO requestVO) {
@ -54,4 +54,10 @@ public class NotifyConfigController {
public Boolean updateStatus(@PathVariable("id") Long id, @PathVariable("status") Integer status) { public Boolean updateStatus(@PathVariable("id") Long id, @PathVariable("status") Integer status) {
return notifyConfigService.updateStatus(id, status); return notifyConfigService.updateStatus(id, status);
} }
@LoginRequired
@DeleteMapping("ids")
public Boolean batchDeleteNotify(@RequestBody Set<Long> ids) {
return notifyConfigService.batchDeleteNotify(ids);
}
} }

View File

@ -12,6 +12,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* <p> * <p>
@ -50,4 +51,10 @@ public class NotifyRecipientController {
public List<CommonLabelValueResponseVO> getNotifyRecipientList() { public List<CommonLabelValueResponseVO> getNotifyRecipientList() {
return notifyRecipientService.getNotifyRecipientList(); return notifyRecipientService.getNotifyRecipientList();
} }
@DeleteMapping("/ids")
@LoginRequired
public Boolean batchDeleteByIds(@RequestBody Set<Long> ids) {
return notifyRecipientService.batchDeleteByIds(ids);
}
} }

View File

@ -10,6 +10,7 @@ import com.aizuda.snailjob.server.web.model.request.NotifyConfigRequestVO;
import com.aizuda.snailjob.server.web.model.response.NotifyConfigResponseVO; import com.aizuda.snailjob.server.web.model.response.NotifyConfigResponseVO;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @author: opensnail * @author: opensnail
@ -27,4 +28,5 @@ public interface NotifyConfigService {
Boolean updateStatus(Long id, Integer status); Boolean updateStatus(Long id, Integer status);
Boolean batchDeleteNotify(Set<Long> ids);
} }

View File

@ -7,6 +7,7 @@ import com.aizuda.snailjob.server.web.model.response.CommonLabelValueResponseVO;
import com.aizuda.snailjob.server.web.model.response.NotifyRecipientResponseVO; import com.aizuda.snailjob.server.web.model.response.NotifyRecipientResponseVO;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @author opensnail * @author opensnail
@ -23,4 +24,5 @@ public interface NotifyRecipientService {
List<CommonLabelValueResponseVO> getNotifyRecipientList(); List<CommonLabelValueResponseVO> getNotifyRecipientList();
Boolean batchDeleteByIds(Set<Long> ids);
} }

View File

@ -196,4 +196,10 @@ public class NotifyConfigServiceImpl implements NotifyConfigService {
.eq(NotifyConfig::getId, id) .eq(NotifyConfig::getId, id)
); );
} }
@Override
public Boolean batchDeleteNotify(final Set<Long> ids) {
return ids.size() == accessTemplate.getNotifyConfigAccess()
.delete(new LambdaQueryWrapper<NotifyConfig>().in(NotifyConfig::getId, ids));
}
} }

View File

@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
/** /**
* @author opensnail * @author opensnail
@ -27,6 +28,7 @@ import java.util.Objects;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class NotifyRecipientServiceImpl implements NotifyRecipientService { public class NotifyRecipientServiceImpl implements NotifyRecipientService {
private final NotifyRecipientMapper notifyRecipientMapper; private final NotifyRecipientMapper notifyRecipientMapper;
@Override @Override
@ -44,7 +46,8 @@ public class NotifyRecipientServiceImpl implements NotifyRecipientService {
queryWrapper.orderByDesc(NotifyRecipient::getCreateDt); queryWrapper.orderByDesc(NotifyRecipient::getCreateDt);
PageDTO<NotifyRecipient> notifyRecipientPageDTO = notifyRecipientMapper.selectPage(pageDTO, queryWrapper); PageDTO<NotifyRecipient> notifyRecipientPageDTO = notifyRecipientMapper.selectPage(pageDTO, queryWrapper);
return new PageResult<>(pageDTO, NotifyRecipientConverter.INSTANCE.toNotifyRecipientResponseVOs(notifyRecipientPageDTO.getRecords())); return new PageResult<>(pageDTO,
NotifyRecipientConverter.INSTANCE.toNotifyRecipientResponseVOs(notifyRecipientPageDTO.getRecords()));
} }
@Override @Override
@ -71,4 +74,9 @@ public class NotifyRecipientServiceImpl implements NotifyRecipientService {
List<NotifyRecipient> notifyRecipients = notifyRecipientMapper.selectList(queryWrapper); List<NotifyRecipient> notifyRecipients = notifyRecipientMapper.selectList(queryWrapper);
return NotifyRecipientConverter.INSTANCE.toCommonLabelValueResponseVOs(notifyRecipients); return NotifyRecipientConverter.INSTANCE.toCommonLabelValueResponseVOs(notifyRecipients);
} }
@Override
public Boolean batchDeleteByIds(final Set<Long> ids) {
return ids.size() == notifyRecipientMapper.deleteBatchIds(ids);
}
} }