diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java index 8a1fa80f..2e885a34 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java @@ -13,16 +13,10 @@ public interface RedisConstant { */ String PREFIX_SILENCE = "SilenceCycle:"; - String STREAM_ALARM = "Stream:Alarm"; - String STREAM_ANALYSIS = "Stream:Analysis"; - String GROUP_ALARM = "Group_Alarm"; - String GROUP_ANALYSIS = "Group_Analysis"; - String CONSUMER_ALARM = "Consumer_Alarm"; - String CONSUMER_ANALYSIS = "Consumer_Analysis"; String NUCLIDE_LINES_LIB = "Nuclide_Lines_Lib:"; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java index 45018aca..f4f8b334 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil; import com.google.common.collect.Lists; import com.sun.mail.imap.IMAPStore; import com.sun.mail.smtp.SMTPAddressFailedException; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.dto.message.MessageDTO; @@ -16,6 +17,7 @@ import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.email.emuns.MailContentType; import org.jeecg.common.exception.DownloadEmailException; import org.jeecg.common.properties.SpectrumPathProperties; +import org.jeecg.common.properties.TaskProperties; import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.Md5Util; import org.jeecg.common.util.RedisUtil; @@ -47,6 +49,8 @@ public class EmailServiceManager { private SysEmail email; private SpectrumPathProperties spectrumPathProperties; + + private TaskProperties taskProperties; /** * 系统启动时间 */ @@ -62,6 +66,8 @@ public class EmailServiceManager { private RedisUtil redisUtil; + private Object downloadEmlLocal = new Object(); + @NotNull public static EmailServiceManager getInstance(){ return new EmailServiceManager(); @@ -80,13 +86,14 @@ public class EmailServiceManager { * @param email 邮件属性 */ public void init(SysEmail email, Integer receiveNum, String temporaryStoragePath, - Date systemStartupTime, SpectrumPathProperties pathProperties, + Date systemStartupTime, SpectrumPathProperties pathProperties,TaskProperties taskProperties, RedisUtil redisUtil){ this.email = email; this.receiveNum = receiveNum; this.temporaryStoragePath = temporaryStoragePath; this.systemStartupTime = systemStartupTime; this.spectrumPathProperties = pathProperties; + this.taskProperties = taskProperties; this.redisUtil = redisUtil; } @@ -328,8 +335,9 @@ public class EmailServiceManager { props.put("mail.smtp.host", email.getEmailServerAddress()); props.put("mail.smtp.port", email.getPort()); props.put("mail.smtp.auth", "true"); - /*props.put("mail.smtp.socketFactory.port", email.getPort()); - props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");*/ + props.put("mail.smtp.starttls.enable", "true"); + props.put("mail.smtp.socketFactory.port", email.getPort()); + props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); Session session = Session.getInstance(props); @@ -519,44 +527,47 @@ public class EmailServiceManager { * 当计数大于10000后从0开始,服务重启后也从0开始 */ public File downloadEmailToEmlDir(@NotNull Message message,Integer emailCounter,Integer batchesCounter) throws MessagingException { - String subject = ""; - File emlFile = null; - String status = EmailLogManager.STATUS_SUCCESS; - Date receivedDate = null; - try { - //获取发件人 - final String address = ((InternetAddress) message.getFrom()[0]).getAddress(); - final String from = address.substring(0,address.indexOf(StringConstant.AT)); - //获取主题 - subject = MimeUtility.decodeText(message.getSubject()); - if(subject.indexOf(StringConstant.SLASH) != -1){ - subject = StringUtils.replace(subject,StringConstant.SLASH,""); - } - if(subject.indexOf(StringConstant.COLON) != -1){ - subject = StringUtils.replace(subject,StringConstant.COLON,""); - } - receivedDate = message.getReceivedDate(); - StringBuilder fileName = new StringBuilder(); - fileName.append(from); - fileName.append(StringConstant.UNDER_LINE); - fileName.append(subject); - fileName.append(StringConstant.UNDER_LINE); - fileName.append(DateUtils.formatDate(new Date(),"YYMMdd")); - fileName.append(StringConstant.UNDER_LINE); - fileName.append(DateUtils.formatDate(new Date(),"HHmmssSSS")); - fileName.append(StringConstant.UNDER_LINE); - fileName.append("receive"); - fileName.append(StringConstant.UNDER_LINE); - fileName.append(DateUtils.formatDate(receivedDate,"YYMMdd")); - fileName.append(StringConstant.UNDER_LINE); - fileName.append(DateUtils.formatDate(receivedDate,"HHmmssSSS")); - fileName.append(StringConstant.UNDER_LINE); - fileName.append(emailCounter); - fileName.append(SAVE_EML_SUFFIX); - final String rootPath = spectrumPathProperties.getRootPath(); - final String emlPath = spectrumPathProperties.getEmlPath(); - emlFile = new File(rootPath+emlPath+File.separator+fileName); - message.writeTo(new FileOutputStream(emlFile)); + synchronized (downloadEmlLocal) { + String subject = ""; + File emlFile = null; + String status = EmailLogManager.STATUS_SUCCESS; + Date receivedDate = null; + FileOutputStream outputStream = null; + try { + //获取发件人 + final String address = ((InternetAddress) message.getFrom()[0]).getAddress(); + final String from = address.substring(0,address.indexOf(StringConstant.AT)); + //获取主题 + subject = MimeUtility.decodeText(message.getSubject()); + if(subject.indexOf(StringConstant.SLASH) != -1){ + subject = StringUtils.replace(subject,StringConstant.SLASH,""); + } + if(subject.indexOf(StringConstant.COLON) != -1){ + subject = StringUtils.replace(subject,StringConstant.COLON,""); + } + receivedDate = message.getReceivedDate(); + StringBuilder fileName = new StringBuilder(); + fileName.append(from); + fileName.append(StringConstant.UNDER_LINE); + fileName.append(subject); + fileName.append(StringConstant.UNDER_LINE); + fileName.append(DateUtils.formatDate(new Date(),"YYMMdd")); + fileName.append(StringConstant.UNDER_LINE); + fileName.append(DateUtils.formatDate(new Date(),"HHmmssSSS")); + fileName.append(StringConstant.UNDER_LINE); + fileName.append("receive"); + fileName.append(StringConstant.UNDER_LINE); + fileName.append(DateUtils.formatDate(receivedDate,"YYMMdd")); + fileName.append(StringConstant.UNDER_LINE); + fileName.append(DateUtils.formatDate(receivedDate,"HHmmssSSS")); + fileName.append(StringConstant.UNDER_LINE); + fileName.append(emailCounter); + fileName.append(SAVE_EML_SUFFIX); + final String rootPath = spectrumPathProperties.getRootPath(); + final String emlPath = spectrumPathProperties.getEmlPath(); + emlFile = new File(rootPath+emlPath+File.separator+fileName); + outputStream = new FileOutputStream(emlFile); + message.writeTo(outputStream); // int bufferSize = 1024 * 1024; // 1M // InputStream inputStream = message.getInputStream(); @@ -574,20 +585,28 @@ public class EmailServiceManager { // // 关闭流 // bufferedInputStream.close(); // bufferedOutputStream.close(); - } catch (MessagingException | IOException e) { - // 下载邮件失败 抛出自定义邮件下载异常 - status = EmailLogManager.STATUS_ERROR; - String errorMsg = StrUtil.format("The email download failed, the subject of the email is {}, the reason is {}.", subject, e.getMessage()); - log.error(errorMsg); - throw new DownloadEmailException(errorMsg); - }catch (Exception e) { - log.error("",e); - }finally { - EmailLogEvent event = new EmailLogEvent(batchesCounter,Thread.currentThread().getId(),EmailLogManager.GS_TYPE_GET,status,EmailLogManager.GETIDEML,subject,DateUtils.formatDate(receivedDate,"yyyy-MM-dd HH:mm:ss:SSS"), - (Objects.isNull(emlFile)?" ":emlFile.getAbsolutePath())); - EmailLogManager.getInstance().offer(Thread.currentThread().getId(),event); + } catch (MessagingException | IOException e) { + // 下载邮件失败 抛出自定义邮件下载异常 + status = EmailLogManager.STATUS_ERROR; + String errorMsg = StrUtil.format("The email download failed, the subject of the email is {}, the reason is {}.", subject, e.getMessage()); + log.error(errorMsg); + throw new DownloadEmailException(errorMsg); + }catch (Exception e) { + log.error("",e); + }finally { + EmailLogEvent event = new EmailLogEvent(batchesCounter,Thread.currentThread().getId(),EmailLogManager.GS_TYPE_GET,status,EmailLogManager.GETIDEML,subject,DateUtils.formatDate(receivedDate,"yyyy-MM-dd HH:mm:ss:SSS"), + (Objects.isNull(emlFile)?" ":emlFile.getAbsolutePath())); + EmailLogManager.getInstance().offer(Thread.currentThread().getId(),event); + try { + if (Objects.nonNull(outputStream)) { + outputStream.close(); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return emlFile; } - return emlFile; } /** @@ -629,10 +648,10 @@ public class EmailServiceManager { if(null != store){ store.close(); } - for(String messageId : messageIds){ - String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId; - redisUtil.del(key); - } +// for(String messageId : messageIds){ +// String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId; +// redisUtil.del(key); +// } } catch (MessagingException e) { log.error("Email closure failed, email address is: {}, reason is: {}",email.getUsername(),e.getMessage()); e.printStackTrace(); @@ -648,10 +667,13 @@ public class EmailServiceManager { boolean exist = false; try { String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId; - exist = redisUtil.hasKey(key); - if(exist){ + int numberKey = redisUtil.get(key) != null? (int) redisUtil.get(key):0; +// exist = redisUtil.hasKey(key); + if(numberKey >= taskProperties.getForceDeletedNumber()){ + exist = true; log.info("Check: Remove Email:{},receiveTime:{}",message.getSubject(), DateUtils.formatDate(message.getReceivedDate(),"yyyy-MM-dd HH:mm:ss")); message.setFlag(Flags.Flag.DELETED,true); + redisUtil.del(key); } return exist; } catch (MessagingException e) { diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java index 34f9e294..3a9122b7 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java @@ -41,6 +41,11 @@ public class TaskProperties implements Serializable { */ private Integer mailThreadExecCycle; + /** + * 线程获取失败邮件次数 + */ + private Integer forceDeletedNumber; + /** * 监测需删除的邮件线程执行周期(毫秒) */ diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/TemplateUtil.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/TemplateUtil.java index d61f655c..f3a902c0 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/TemplateUtil.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/TemplateUtil.java @@ -1,13 +1,20 @@ package org.jeecg.common.util; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; import org.jeecg.common.api.dto.message.MessageDTO; import org.jeecg.common.util.dynamic.db.FreemarkerParseFactory; import org.jeecg.modules.base.entity.postgre.SysMessageTemplate; import org.jeecg.modules.base.service.ISysMessageTemplateService; + +import java.util.ArrayList; +import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /* * 模板工具类 @@ -37,6 +44,30 @@ public class TemplateUtil { return messageDTO; } + public static MessageDTO parse1(String code, Map data){ + MessageDTO messageDTO = new MessageDTO(); + SysMessageTemplate template = templateService.getOne(code); + // 如果没有消息模板 + if(ObjectUtil.isNull(template)) + return messageDTO; + String templateName = template.getTemplateName(); + String templateContent = template.getTemplateContent(); + messageDTO.setTitle(templateName); + if (MapUtil.isEmpty(data)) + return messageDTO; + Set keys = data.keySet(); + String pattern = "\\<([^<>]*{}[^<>]*)\\>"; + List contents = new ArrayList<>(); + for (String key : keys) { + contents.add(ReUtil.getGroup1(StrUtil.format(pattern, key), templateContent)); + } + templateContent = CollUtil.join(contents, "#"); + String content = FreemarkerParseFactory + .parseTemplateContent(templateContent, data, true); + messageDTO.setContent(content); + return messageDTO; + } + public static MessageDTO parse(String title, String code, Map data) { MessageDTO messageDTO = new MessageDTO(); SysMessageTemplate template = templateService.getOne(code); @@ -53,4 +84,28 @@ public class TemplateUtil { messageDTO.setContent(content); return messageDTO; } + + public static MessageDTO parse1(String title, String code, Map data) { + MessageDTO messageDTO = new MessageDTO(); + SysMessageTemplate template = templateService.getOne(code); + // 如果没有消息模板 + if(ObjectUtil.isNull(template)) + return messageDTO; + String templateName = template.getTemplateName(); + String templateContent = template.getTemplateContent(); + messageDTO.setTitle(StrUtil.isBlank(title) ? templateName : title); + if (MapUtil.isEmpty(data)) + return messageDTO; + Set keys = data.keySet(); + String pattern = "\\<([^<>]*{}[^<>]*)\\>"; + List contents = new ArrayList<>(); + for (String key : keys) { + contents.add(ReUtil.getGroup1(StrUtil.format(pattern, key), templateContent)); + } + templateContent = CollUtil.join(contents, "#"); + String content = FreemarkerParseFactory + .parseTemplateContent(templateContent, data, true); + messageDTO.setContent(content); + return messageDTO; + } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/comparator/FileComparator.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/comparator/FileComparator.java index 4250675b..28626188 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/comparator/FileComparator.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/comparator/FileComparator.java @@ -6,8 +6,8 @@ import java.util.Comparator; public class FileComparator implements Comparator { - private final String field; - private final String order; + private String field; + private String order; public FileComparator(String field, String order) { this.field = field; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideInfo.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideInfo.java index 77a23fac..cac153bc 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideInfo.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideInfo.java @@ -3,8 +3,12 @@ package org.jeecg.modules.base.dto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import org.jeecg.common.util.NumUtil; + import java.io.Serializable; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; @Data @JsonIgnoreProperties(ignoreUnknown = true) @@ -17,4 +21,8 @@ public class NuclideInfo implements Serializable { private String datasource; private String value; + + public void keepSix(){ + this.value = NumUtil.keepStr(this.value, 6); + } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/Condition.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/Condition.java index 7ce3278a..587c8923 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/Condition.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/Condition.java @@ -9,7 +9,7 @@ import lombok.Getter; public enum Condition { FIRST_FOUND("1"), ABOVE_AVERAGE("2"), MEANWHILE("3"); - private String value; + private final String value; public static Condition valueOf1(String value){ for (Condition condition : Condition.values()) { diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DSType.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DSType.java index 25ac6382..de9f309d 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DSType.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DSType.java @@ -1,10 +1,14 @@ package org.jeecg.modules.base.enums; +import cn.hutool.core.util.StrUtil; +import lombok.Getter; + /** * @author nieziyan * 数据源类型 */ +@Getter public enum DSType { /* ARMD自动处理库 */ ARMDARR("1"), @@ -15,13 +19,17 @@ public enum DSType { /* IDC人工交互库 */ IDCRRR("4"); - DSType(java.lang.String type) { + DSType(String type) { this.type = type; } - private String type; + private final String type; - public String getType() { - return type; + public static String typeOf(String type){ + for (DSType dsType : DSType.values()) { + if (StrUtil.equals(type, dsType.getType())) + return dsType.name(); + } + return null; } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java index 1165b97e..7bf3492c 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java @@ -5,8 +5,10 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.text.StrBuilder; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; import lombok.Data; import lombok.NoArgsConstructor; @@ -16,14 +18,15 @@ import org.jeecg.common.config.mqtoken.UserTokenContext; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.constant.enums.SampleType; -import org.jeecg.common.util.RedisStreamUtil; -import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.common.util.*; +import org.jeecg.common.util.dynamic.db.FreemarkerParseFactory; import org.jeecg.modules.base.dto.NuclideInfo; import org.jeecg.modules.base.dto.Info; import org.jeecg.modules.base.entity.postgre.AlarmAnalysisLog; import org.jeecg.modules.base.entity.postgre.AlarmAnalysisNuclideAvg; import org.jeecg.modules.base.entity.postgre.AlarmAnalysisRule; import org.jeecg.modules.base.enums.Condition; +import org.jeecg.modules.base.enums.DSType; import org.jeecg.modules.feignclient.SystemClient; import org.jeecg.modules.service.AnalysisResultService; import org.jeecg.modules.service.IAlarmAnalysisLogService; @@ -36,9 +39,14 @@ import org.springframework.stereotype.Component; import static org.jeecg.common.constant.enums.MessageTypeEnum.*; import static org.jeecg.common.util.TokenUtils.getTempToken; +import static org.jeecg.modules.base.enums.Template.ANALYSIS_NUCLIDE; +import static org.jeecg.modules.base.enums.Template.MONITOR_EMAIL; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; @Data @@ -71,7 +79,7 @@ public class AnalysisConsumer implements StreamListener nuclidesCross){ Set nuclideNames = nuclidesCross.keySet(); - StringBuilder alarmInfo = new StringBuilder(); - List firstDetected; - List moreThanAvg = new ArrayList<>(); String conditionStr = info.getConditions(); String betaOrGamma = info.getBetaOrGamma(); String datasource = info.getDatasource(); + String stationId = info.getStationId(); + // 获取谱文件采样日期 如果为null 则默认为LocalDate.now() + LocalDate collDate = ObjectUtil.isNull(info.getCollectionDate()) ? LocalDate.now() : + info.getCollectionDate().toLocalDate(); + List conditions = ListUtil.toList(conditionStr.split(COMMA)); + List firstDetected = new ArrayList<>(); // 首次发现 + List moreThanAvg = new ArrayList<>(); // 超浓度均值 + List meanwhile = new ArrayList<>(); // 同时出现两种及以上核素 for (String con : conditions) { Condition condition = Condition.valueOf1(con); - if (ObjectUtil.isNotNull(condition)){ - switch (condition){ - case FIRST_FOUND: // 首次发现该元素 - firstDetected = firstDetected(betaOrGamma,datasource,nuclideNames); - if (CollUtil.isNotEmpty(firstDetected)){ - String message = "First discovery of nuclides: [" + StrUtil.join(COMMA,firstDetected) + "]"; - alarmInfo.append(message); - } - break; - case ABOVE_AVERAGE: // 元素浓度高于均值 - moreThanAvg = moreThanAvg(datasource,nuclidesCross); - if (CollUtil.isNotEmpty(moreThanAvg)){ - for (NuclideInfo nuclideInfo : moreThanAvg) { - String nuclide = nuclideInfo.getNuclide(); - String threshold = nuclideInfo.getThreshold(); - String message = "Nuclide " + nuclide + "is above average: " + threshold; - alarmInfo.append(COMMA).append(message); - } - } - break; - case MEANWHILE: // 同时出现两种及以上核素 - if (nuclideNames.size() >= 2){ - String message = "Simultaneously detecting nuclides: [" + StrUtil.join(COMMA,nuclideNames) + "]"; - alarmInfo.append(COMMA).append(message); - } - break; - default: - break; - } + if (ObjectUtil.isNull(condition)) continue; + switch (condition){ + case FIRST_FOUND: // 首次发现该元素 + firstDetected = firstDetected(betaOrGamma, datasource, nuclideNames); + break; + case ABOVE_AVERAGE: // 元素浓度高于均值 + moreThanAvg = moreThanAvg(datasource, stationId, collDate, nuclidesCross); + break; + case MEANWHILE: // 同时出现两种及以上核素 + if (CollUtil.isNotEmpty(nuclideNames) && nuclideNames.size() >= 2) + meanwhile.addAll(nuclideNames); + break; + default: + break; } } - if (StrUtil.isNotBlank(alarmInfo.toString())){ - // 保存报警日志 - AlarmAnalysisLog logInfo = new AlarmAnalysisLog(); - BeanUtil.copyProperties(info,logInfo); - SampleType sampleType = SampleType.typeOf(betaOrGamma); - if (ObjectUtil.isNotNull(sampleType)) - logInfo.setSampleType(sampleType.getValue()); - if (alarmInfo.toString().startsWith(COMMA)) - alarmInfo = new StringBuilder(StrUtil.sub(alarmInfo.toString(), 1, alarmInfo.length())); - logInfo.setAlarmInfo(alarmInfo.toString()); - if (CollUtil.isNotEmpty(moreThanAvg)) - logInfo.setNuclideInfoList(moreThanAvg); - logService.saveLog(logInfo); - // 发送报警信息 - String groupId = info.getGroupId(); - MessageDTO messageDTO = new MessageDTO(); - messageDTO.setTitle("Nuclied Warn Info").setContent(alarmInfo.toString()); - if (StrUtil.isNotBlank(groupId)) { - systemClient.sendMessage(messageDTO, groupId, ALL.getValue()); - systemClient.pushMessageToSingle(messageDTO, groupId); - } + // 构建预警信息 + DataTool dataTool = DataTool.getInstance(); + if (CollUtil.isNotEmpty(firstDetected)) + dataTool.put("firstDetected", CollUtil.join(firstDetected, StrUtil.COMMA + StrUtil.SPACE)); + if (CollUtil.isNotEmpty(moreThanAvg)){ + String above = moreThanAvg.stream() + .map(item -> item.getNuclide() + "(" + item.getValue() + ")" + " > " + item.getThreshold()) + .collect(Collectors.joining(StrUtil.COMMA + StrUtil.SPACE)); + dataTool.put("moreThanAvg", above); } + if (CollUtil.isNotEmpty(meanwhile)) + dataTool.put("meanwhile", CollUtil.join(meanwhile, StrUtil.COMMA + StrUtil.SPACE)); + // 如果报警数据为空 则不需要发送报警信息和生成报警日志 + if (MapUtil.isEmpty(dataTool.get())) return; + MessageDTO messageDTO = TemplateUtil.parse1(ANALYSIS_NUCLIDE.getCode(), dataTool.get()); + // 保存报警日志 + AlarmAnalysisLog logInfo = new AlarmAnalysisLog(); + BeanUtil.copyProperties(info, logInfo); + SampleType sampleType = SampleType.typeOf(betaOrGamma); + if (ObjectUtil.isNotNull(sampleType)) + logInfo.setSampleType(sampleType.getValue()); + logInfo.setAlarmInfo(messageDTO.getContent()); + if (CollUtil.isNotEmpty(moreThanAvg)) + logInfo.setNuclideInfoList(moreThanAvg); + logService.saveLog(logInfo); + // 发送报警信息 + String groupId = info.getGroupId(); + systemClient.sendMessage(messageDTO, groupId, ALL.getValue()); + systemClient.pushMessageToSingle(messageDTO, groupId); } /** @@ -222,12 +228,12 @@ public class AnalysisConsumer implements StreamListener moreThanAvg(String dataSourceType, - Map nuclidesCross){ + private List moreThanAvg(String dataSourceType, String stationId, + LocalDate collDate, Map nuclidesCross){ List nuclideInfos = new ArrayList<>(); Set nuclideNames = nuclidesCross.keySet(); Map nuclideAvgs = nuclideAvgService - .list(nuclideNames, dataSourceType).stream() + .list(nuclideNames, dataSourceType, stationId, collDate).stream() .collect(Collectors.toMap(AlarmAnalysisNuclideAvg::getNuclide, AlarmAnalysisNuclideAvg::getVal)); for (Map.Entry nuclide : nuclidesCross.entrySet()) { @@ -246,41 +252,27 @@ public class AnalysisConsumer implements StreamListener readA1 = StreamMessageListenerContainer + /* 1.需要手动确认消费消息 */ + // 1.1 使用 register 方式 + StreamMessageListenerContainer.ConsumerStreamReadRequest readRequest = StreamMessageListenerContainer .StreamReadRequest - .builder(StreamOffset.create(warnKey, ReadOffset.lastConsumed())) - .consumer(Consumer.from(groupWarnA, consumerWarnA1)) + .builder(StreamOffset.create(analysisKey, ReadOffset.lastConsumed())) + .consumer(Consumer.from(analysisGroup, analysisConsumer)) + // 手动确认消费了消息 默认为自动确认消息 .autoAcknowledge(false) - // 如果消费者发生了异常,是否禁止消费者消费 + // 如果消费者发生了异常 不禁止消费者消费 默认为禁止 .cancelOnError(throwable -> false) .build(); - ConsumeA1 consumeA1 = new ConsumeA1(groupWarnA, consumerWarnA1); - streamMessageListenerContainer.register(readA1, consumeA1);*/ - AnalysisConsumer analysis = new AnalysisConsumer(analysisGroup,analysisConsumer); + AnalysisConsumer analysis = new AnalysisConsumer(analysisGroup, analysisConsumer); + streamMessageListenerContainer.register(readRequest, analysis); + // 1.2 使用 receive 方式 + /*AnalysisConsumer analysis = new AnalysisConsumer(analysisGroup, analysisConsumer); streamMessageListenerContainer.receive(Consumer.from(analysisGroup, analysisConsumer), - StreamOffset.create(analysisKey, ReadOffset.lastConsumed()), analysis); - // 创建消费组A中的消费者A2,自动ACK - /* ConsumeA2 consumeA2 = new ConsumeA2(consumerWarnA2); - streamMessageListenerContainer.receiveAutoAck(Consumer.from(groupWarnA, consumerWarnA2), - StreamOffset.create(warnKey, ReadOffset.lastConsumed()), consumeA2);*/ + StreamOffset.create(analysisKey, ReadOffset.lastConsumed()), analysis);*/ + /* 2.自动确认消费消息 */ + // 2.1 使用 receive 方式 + /*AnalysisConsumer analysis = new AnalysisConsumer(analysisGroup,analysisConsumer); + streamMessageListenerContainer.receiveAutoAck(Consumer.from(analysisGroup, analysisConsumer), + StreamOffset.create(analysisKey, ReadOffset.lastConsumed()), analysis);*/ return streamMessageListenerContainer; } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmAnalysisNuclideAvgService.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmAnalysisNuclideAvgService.java index 70199b04..a9afd7a9 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmAnalysisNuclideAvgService.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmAnalysisNuclideAvgService.java @@ -6,12 +6,14 @@ import org.jeecg.modules.base.entity.postgre.AlarmAnalysisNuclideAvg; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.base.bizVo.NuclideAvgVo; +import java.time.LocalDate; import java.util.List; import java.util.Set; public interface IAlarmAnalysisNuclideAvgService extends IService { - List list(Set nuclideNames,String dataSourceType); + List list(Set nuclideNames, String dataSourceType, + String stationId, LocalDate collDate); Page findPage(NuclideAvgVo nuclideAvgVo); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisLogServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisLogServiceImpl.java index af13f2a3..47f34b54 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisLogServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisLogServiceImpl.java @@ -75,6 +75,7 @@ public class AlarmAnalysisLogServiceImpl extends ServiceImpl nuclideInfos = mapper.readValue(nuclideInfo, new TypeReference>() {}); + nuclideInfos.forEach(NuclideInfo::keepSix); logDto.setNuclideList(nuclideInfos); } catch (JsonProcessingException e) { log.error("NuclideInfo解析异常: {}", e.getMessage()); diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideAvgServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideAvgServiceImpl.java index 2659c56d..71d23713 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideAvgServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideAvgServiceImpl.java @@ -15,6 +15,7 @@ import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Set; @@ -27,13 +28,15 @@ public class AlarmAnalysisNuclideAvgServiceImpl extends ServiceImpl list(Set nuclideNames,String dataSourceType) { - LocalDate dayAgo = LocalDate.now().minusDays(1); + public List list(Set nuclideNames, String dataSourceType, + String stationId, LocalDate collDate) { + LocalDate dayAgo = collDate.minusDays(1); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(AlarmAnalysisNuclideAvg::getDataSourceType,dataSourceType); - wrapper.eq(AlarmAnalysisNuclideAvg::getCaclDate,dayAgo); + wrapper.eq(AlarmAnalysisNuclideAvg::getStationId, stationId); + wrapper.eq(AlarmAnalysisNuclideAvg::getDataSourceType, dataSourceType); + wrapper.eq(AlarmAnalysisNuclideAvg::getCaclDate, dayAgo); wrapper.in(AlarmAnalysisNuclideAvg::getNuclide,nuclideNames); - return list(wrapper); + return this.list(wrapper); } @Override diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java index 8abbeb06..737b53c8 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java @@ -74,23 +74,23 @@ public class EmailParsingActuator extends Thread{ long start = System.currentTimeMillis(); final EmailServiceManager emailServiceManager = EmailServiceManager.getInstance(); emailServiceManager.init(this.emailProperties,this.taskProperties.getReceiveNum(),this.taskProperties.getTemporaryStoragePath(), - this.systemStartupTime, spectrumServiceQuotes.getSpectrumPathProperties(),spectrumServiceQuotes.getRedisUtil()); + this.systemStartupTime, spectrumServiceQuotes.getSpectrumPathProperties(), spectrumServiceQuotes.getTaskProperties(), spectrumServiceQuotes.getRedisUtil()); List messageIds = new ArrayList<>(); try { Message[] messages = emailServiceManager.receiveMail(); if(ArrayUtils.isNotEmpty(messages)){ log.info("EmailParsingActuator本次获取邮件数量为:{}",messages.length); //检验获取的邮件是否在之前删除失败列表中,若在直接调用邮件API删除,并且此次数组里元素也删除 -// for(int i=messages.length-1;i>=0;i--){ -// if (!messages[i].isExpunged()){ -// String messageId = ((MimeMessage) messages[i]).getMessageID(); -// final boolean exist = emailServiceManager.check(messages[i],messageId); -// messageIds.add(messageId); -// if(exist){ -// messages = ArrayUtils.remove(messages,i); -// } -// } -// } + for(int i=messages.length-1;i>=0;i--){ + if (!messages[i].isExpunged()){ + String messageId = ((MimeMessage) messages[i]).getMessageID(); + final boolean exist = emailServiceManager.check(messages[i],messageId); + messageIds.add(messageId); + if(exist){ + messages = ArrayUtils.remove(messages,i); + } + } + } log.info("EmailParsingActuator本次真实执行邮件数量为:{}",messages.length); if(messages.length > 0){ //本批次邮件号 @@ -107,6 +107,8 @@ public class EmailParsingActuator extends Thread{ } }catch (InterruptedException e) { e.printStackTrace(); + } catch (MessagingException e) { + throw new RuntimeException(e); } finally { //清除本批次邮件日志缓存 EmailLogManager.getInstance().clear(); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java index 53f17107..a88f07ad 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java @@ -96,7 +96,10 @@ public class SpectrumParsingActuator implements Runnable{ receiveDate = DateUtils.formatDate(message.getReceivedDate(),"yyyy-MM-dd HH:mm:ss"); String emlName = subject+ StringConstant.UNDER_LINE+ receiveDate; String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId; - spectrumServiceQuotes.getRedisUtil().set(key,emlName,expiryTime); +// spectrumServiceQuotes.getRedisUtil().set(key,emlName,expiryTime); + //判断当前key的下载次数是否超过限制次数 + spectrumServiceQuotes.getRedisUtil().incr(key, 1L); + spectrumServiceQuotes.getRedisUtil().expire(key, expiryTime); //线程开始初始化时,初始本线程负责的能谱日志事件 SpectrumLogManager.mailSpectrumLogManager.offer(Thread.currentThread().getId(),null); @@ -123,6 +126,7 @@ public class SpectrumParsingActuator implements Runnable{ try { //开始解析 spectrumHandler.handler(); + spectrumServiceQuotes.getRedisUtil().del(key); } catch (Exception e) { //如果是gamma谱的分析异常 if (e instanceof AnalySpectrumException) { @@ -136,7 +140,6 @@ public class SpectrumParsingActuator implements Runnable{ throw e; } } - }else{ log.warn("This email {} parsing failed and is not listed in the Met, Alert, SOH, Sample, Detbkphd, QC, Gasbkphd spectra.",subject); } @@ -204,7 +207,7 @@ public class SpectrumParsingActuator implements Runnable{ final String finalPath = rootPath+emlErrorPath; FileOperation.moveFile(emlFile,finalPath,true); // 删除 key,防止下次线程执行删除邮件 - spectrumServiceQuotes.getRedisUtil().del(key); +// spectrumServiceQuotes.getRedisUtil().del(key); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/ManageUtil.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/ManageUtil.java index 17b8ed10..7f68d45c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/ManageUtil.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/ManageUtil.java @@ -1,5 +1,6 @@ package org.jeecg.modules.feignclient; +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.RedisConstant; import org.jeecg.common.system.util.JwtUtil; @@ -9,6 +10,7 @@ import org.jeecg.modules.base.dto.LoginResult; import org.jeecg.modules.base.dto.LoginVo; import org.springframework.core.env.Environment; +@Slf4j public class ManageUtil { private static RedisUtil redisUtil; @@ -31,20 +33,28 @@ public class ManageUtil { * 登录运管系统 获取Token * */ public static String getToken(){ - if (redisUtil.hasKey(RedisConstant.MANAGE_TOKEN)) - return (String) redisUtil.get(RedisConstant.MANAGE_TOKEN); - - LoginVo loginVo = new LoginVo(username, password); - Result loginRes = monitorSystem.login(loginVo); - String token = loginRes.getResult().getToken(); - redisUtil.set(RedisConstant.MANAGE_TOKEN, token, JwtUtil.EXPIRE_TIME / 1000 - 10); - return token; + String token = null; + try { + if (redisUtil.hasKey(RedisConstant.MANAGE_TOKEN)) + return (String) redisUtil.get(RedisConstant.MANAGE_TOKEN); + LoginVo loginVo = new LoginVo(username, password); + Result loginRes = monitorSystem.login(loginVo); + token = loginRes.getResult().getToken(); + redisUtil.set(RedisConstant.MANAGE_TOKEN, token, JwtUtil.EXPIRE_TIME / 1000 - 10); + return token; + }catch (RuntimeException e){ + return token; + } } public static void refreshToken(){ - LoginVo loginVo = new LoginVo(username, password); - Result loginRes = monitorSystem.login(loginVo); - String token = loginRes.getResult().getToken(); - redisUtil.set(RedisConstant.MANAGE_TOKEN, token, JwtUtil.EXPIRE_TIME / 1000 - 10); + try { + LoginVo loginVo = new LoginVo(username, password); + Result loginRes = monitorSystem.login(loginVo); + String token = loginRes.getResult().getToken(); + redisUtil.set(RedisConstant.MANAGE_TOKEN, token, JwtUtil.EXPIRE_TIME / 1000 - 10); + }catch (RuntimeException e){ + log.error("运管系统登录异常, Token刷新失败: {}", e.getMessage()); + } } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/SendMessage.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/SendMessage.java index 698fa427..d3e39205 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/SendMessage.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/SendMessage.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.ListUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.dto.message.MessageDTO; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.constant.enums.MessageTypeEnum; @@ -27,6 +28,7 @@ import static org.jeecg.common.constant.enums.MessageTypeEnum.*; * @author nieziyan * @date 2023-06-21 */ +@Slf4j @Component public class SendMessage { @@ -50,6 +52,7 @@ public class SendMessage { */ public void send(MessageDTO messageDTO, String groupId, String notific){ Map contact = getContact(groupId); + if (MapUtil.isEmpty(contact)) return; if (StrUtil.isBlank(notific)) return; List ways = ListUtil.toList(StrUtil.split(notific, COMMA)); if (ways.contains(ALL.getValue())) @@ -96,26 +99,33 @@ public class SendMessage { * @param groupId */ private Map getContact(String groupId){ - List userIds = abnormalAlarmClient.userIds(groupId).getResult(); - // 查询用户信息 - List sysUsers = sysUserService.listByIds(userIds); - // 用户名 - String usernameList = sysUsers.stream().map(SysUser::getUsername).filter(StrUtil::isNotBlank) - .collect(Collectors.joining(COMMA)); - // 邮箱 - String emailList = sysUsers.stream().map(SysUser::getEmail).filter(StrUtil::isNotBlank) - .collect(Collectors.joining(COMMA)); - // 用户名-邮箱Map - Map userEmail = sysUsers.stream() - .collect(Collectors.toMap(SysUser::getUsername, SysUser::getEmail)); - // 手机号码 - String phoneList = sysUsers.stream().map(SysUser::getPhone).filter(StrUtil::isNotBlank) - .collect(Collectors.joining(COMMA)); Map result = new HashMap<>(); - result.put(SYSTEM, usernameList); - result.put(EMAIL, emailList); - result.put(SMS, phoneList); - result.putAll(userEmail); - return result; + try { + List userIds = abnormalAlarmClient.userIds(groupId).getResult(); + // 查询用户信息 + List sysUsers = sysUserService.listByIds(userIds); + // 用户名 + String usernameList = sysUsers.stream().map(SysUser::getUsername).filter(StrUtil::isNotBlank) + .collect(Collectors.joining(COMMA)); + // 邮箱 + String emailList = sysUsers.stream().map(SysUser::getEmail).filter(StrUtil::isNotBlank) + .collect(Collectors.joining(COMMA)); + // 用户名-邮箱Map + Map userEmail = sysUsers.stream() + .filter(item -> StrUtil.isNotBlank(item.getEmail())) + .collect(Collectors.toMap(SysUser::getUsername, SysUser::getEmail)); + // 手机号码 + String phoneList = sysUsers.stream().map(SysUser::getPhone).filter(StrUtil::isNotBlank) + .collect(Collectors.joining(COMMA)); + + result.put(SYSTEM, usernameList); + result.put(EMAIL, emailList); + result.put(SMS, phoneList); + result.putAll(userEmail); + return result; + }catch (Exception e) { + log.error("获取收件人联系信息异常: {}", e.getMessage()); + return result; + } } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java index 9753f15a..5da9a25a 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import feign.FeignException; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.dto.message.MessageDTO; @@ -102,6 +103,10 @@ public class DatabaseJob extends Monitor implements Job{ }*/ // 向运管查询监控项数据 String token = ManageUtil.getToken(); + if(StrUtil.isBlank(token)){ + log.error("运管系统登录异常, Token获取失败"); + continue; + } Result result = getMonitorSystem().itemBack(itemId, itemType, start, end, token); ItemHistory itemHistory = result.getResult(); if (ObjectUtil.isNull(itemHistory)){ @@ -141,9 +146,12 @@ public class DatabaseJob extends Monitor implements Job{ getSendMessage().send(messageDTO, groupId, notific); getPushAppUtil().pushToSingle(messageDTO, groupId); } + } catch (FeignException.Unauthorized e){ + ManageUtil.refreshToken(); + log.warn("向运管系统查询ItemHistory信息异常: Token失效,已刷新Token"); } catch (JsonProcessingException e) { log.error("Database预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); - }catch (Exception e){ + } catch (Exception e){ log.error("Database监控异常: {}", e.getMessage()); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java index 5d5c8a89..2c544195 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java @@ -85,6 +85,10 @@ public class ServerJob extends Monitor implements Job { // 向运管查询监控项数据 String token = ManageUtil.getToken(); + if(StrUtil.isBlank(token)){ + log.error("运管系统登录异常, Token获取失败"); + continue; + } Result result = getMonitorSystem().itemBack(itemId, itemType, start, end, token); ItemHistory itemHistory = result.getResult(); if (ObjectUtil.isNull(itemHistory)){ @@ -124,12 +128,12 @@ public class ServerJob extends Monitor implements Job { getSendMessage().send(messageDTO, groupId, notific); getPushAppUtil().pushToSingle(messageDTO, groupId); } - }catch (FeignException.Unauthorized e){ + } catch (FeignException.Unauthorized e){ ManageUtil.refreshToken(); log.warn("向运管系统查询ItemHistory信息异常: Token失效,已刷新Token"); } catch (JsonProcessingException e) { log.error("Server预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); - }catch (Exception e){ + } catch (Exception e){ log.error("Server监控异常: {}", e.getMessage()); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/DatabaseJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/DatabaseJob.java index 2c8d7036..5f76098c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/DatabaseJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/DatabaseJob.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import feign.FeignException; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.dto.message.MessageDTO; @@ -86,6 +87,10 @@ public class DatabaseJob extends Monitor { // 向运管查询监控项数据 String token = ManageUtil.getToken(); + if(StrUtil.isBlank(token)){ + log.error("运管系统登录异常, Token获取失败"); + continue; + } Result result = getMonitorSystem().itemBack(itemId, itemType, start, end, token); ItemHistory itemHistory = result.getResult(); if (ObjectUtil.isNull(itemHistory)){ @@ -125,11 +130,13 @@ public class DatabaseJob extends Monitor { getSendMessage().send(messageDTO, groupId, notific); getPushAppUtil().pushToSingle(messageDTO, groupId); } + }catch (FeignException.Unauthorized e){ + ManageUtil.refreshToken(); + log.warn("向运管系统查询ItemHistory信息异常: Token失效,已刷新Token"); } catch (JsonProcessingException e) { log.error("Database预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); }catch (Exception e){ log.error("Database监控异常: {}", e.getMessage()); - e.printStackTrace(); } } destroy(); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/EmailJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/EmailJob.java index 2259aa4c..ef51c991 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/EmailJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/EmailJob.java @@ -111,7 +111,6 @@ public class EmailJob extends Monitor{ log.error("Email预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); }catch (Exception e){ log.error("Email监控异常: {}", e.getMessage()); - e.printStackTrace(); } } destroy(); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/ServerJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/ServerJob.java index 9bfe5b86..42182ba7 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/ServerJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/ServerJob.java @@ -84,6 +84,10 @@ public class ServerJob extends Monitor{ // 向运管查询监控项数据 String token = ManageUtil.getToken(); + if(StrUtil.isBlank(token)){ + log.error("运管系统登录异常, Token获取失败"); + continue; + } Result result = getMonitorSystem().itemBack(itemId, itemType, start, end, token); ItemHistory itemHistory = result.getResult(); if (ObjectUtil.isNull(itemHistory)){ @@ -123,14 +127,13 @@ public class ServerJob extends Monitor{ getSendMessage().send(messageDTO, groupId, notific); getPushAppUtil().pushToSingle(messageDTO, groupId); } - }catch (FeignException.Unauthorized e){ + } catch (FeignException.Unauthorized e){ ManageUtil.refreshToken(); log.warn("向运管系统查询ItemHistory信息异常: Token失效,已刷新Token"); } catch (JsonProcessingException e) { log.error("Server预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); - }catch (Exception e){ + } catch (Exception e){ log.error("Server监控异常: {}", e.getMessage()); - e.printStackTrace(); } } destroy(); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/TableSpaceJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/TableSpaceJob.java index 441b344f..9705aceb 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/TableSpaceJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/TableSpaceJob.java @@ -44,7 +44,7 @@ public class TableSpaceJob extends Monitor { /** * 解析Oracle 表空间预警规则 **/ - @Scheduled(cron = "${task.period-space:0 0 */1 * * ?}") + @Scheduled(cron = "${task.period-space:0 0/1 * * * ?}") public void execute(){ init(); @@ -124,7 +124,6 @@ public class TableSpaceJob extends Monitor { log.error("Database-TableSpace预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); }catch (Exception e){ log.error("Database-TableSpace监控异常: {}", e.getMessage()); - e.printStackTrace(); } } destroy();