feat:完善

This commit is contained in:
nieziyan 2023-08-18 17:10:34 +08:00
parent da69a39e95
commit 2a8ccef920
6 changed files with 41 additions and 31 deletions

View File

@ -7,7 +7,8 @@ import lombok.experimental.Accessors;
import org.jeecg.modules.base.enums.SourceType; import org.jeecg.modules.base.enums.SourceType;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.time.LocalDateTime;
import java.util.Date;
import java.util.Map; import java.util.Map;
@Data @Data
@ -30,8 +31,14 @@ public class RuleDto implements Serializable{
// 谱id // 谱id
private String sampleId; private String sampleId;
// 谱Name
private String sampleName;
// 采样时间
private LocalDateTime collectionDate;
// 数据源类型(ARMDARR=1|ARMDRRR=2|IDCARR=3|IDCRRR=4) // 数据源类型(ARMDARR=1|ARMDRRR=2|IDCARR=3|IDCRRR=4)
private String dataSourceType; private String datasource;
// 谱类型 (FULL|PREL) // 谱类型 (FULL|PREL)
private String fullOrPrel; private String fullOrPrel;
@ -41,4 +48,11 @@ public class RuleDto implements Serializable{
// 核素名称-浓度值 // 核素名称-浓度值
private Map<String,String> nuclides; private Map<String,String> nuclides;
/* 以下属性不需要传值 */
private String ruleId;
private String groupId;
private String conditions;
} }

View File

@ -49,6 +49,8 @@ public class AlarmAnalysisLog implements Serializable{
private String datasource; private String datasource;
private String sampleName;
@TableField(exist = false) @TableField(exist = false)
private List<NuclideInfo> nuclideInfoList; private List<NuclideInfo> nuclideInfoList;
} }

View File

@ -15,6 +15,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import org.jeecg.common.system.base.entity.JeecgEntity; import org.jeecg.common.system.base.entity.JeecgEntity;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.scheduling.annotation.Scheduled;
@Data @Data
@TableName("alarm_analysis_rule") @TableName("alarm_analysis_rule")

View File

@ -1,23 +1,19 @@
package org.jeecg.modules.redisStream; package org.jeecg.modules.redisStream;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.config.mqtoken.UserTokenContext; import org.jeecg.common.config.mqtoken.UserTokenContext;
import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.RedisConstant;
import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.util.RedisStreamUtil; import org.jeecg.common.util.RedisStreamUtil;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.base.dto.NuclideInfo; import org.jeecg.modules.base.dto.NuclideInfo;
import org.jeecg.modules.base.dto.RuleDto; import org.jeecg.modules.base.dto.RuleDto;
@ -29,7 +25,6 @@ import org.jeecg.modules.service.AnalysisResultService;
import org.jeecg.modules.service.IAlarmAnalysisLogService; import org.jeecg.modules.service.IAlarmAnalysisLogService;
import org.jeecg.modules.service.IAlarmAnalysisNuclideAvgService; import org.jeecg.modules.service.IAlarmAnalysisNuclideAvgService;
import org.jeecg.modules.service.IAlarmAnalysisRuleService; import org.jeecg.modules.service.IAlarmAnalysisRuleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.stream.ObjectRecord; import org.springframework.data.redis.connection.stream.ObjectRecord;
import org.springframework.data.redis.connection.stream.RecordId; import org.springframework.data.redis.connection.stream.RecordId;
import org.springframework.data.redis.stream.StreamListener; import org.springframework.data.redis.stream.StreamListener;
@ -38,8 +33,6 @@ import static org.jeecg.common.constant.enums.MessageTypeEnum.*;
import static org.jeecg.common.util.TokenUtils.getTempToken; import static org.jeecg.common.util.TokenUtils.getTempToken;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -101,8 +94,7 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
String stationId = ruleDto.getStationId(); String stationId = ruleDto.getStationId();
String sampleId = ruleDto.getSampleId(); String sampleId = ruleDto.getSampleId();
String fullOrPrel = ruleDto.getFullOrPrel(); String fullOrPrel = ruleDto.getFullOrPrel();
String betaOrGamma = ruleDto.getBetaOrGamma(); String datasource = ruleDto.getDatasource();
String dataSourceType = ruleDto.getDataSourceType();
Map<String, String> nuclides = ruleDto.getNuclides(); Map<String, String> nuclides = ruleDto.getNuclides();
if (StrUtil.isBlank(stationId)) return; if (StrUtil.isBlank(stationId)) return;
if (StrUtil.isBlank(sampleId)) return; if (StrUtil.isBlank(sampleId)) return;
@ -118,7 +110,7 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
continue; continue;
// 是否在当前规则关注的数据源内 // 是否在当前规则关注的数据源内
String source = rule.getSource(); String source = rule.getSource();
if (!StrUtil.contains(source,dataSourceType)) if (!StrUtil.contains(source,datasource))
continue; continue;
// 是否在当前规则关注的谱类型内 // 是否在当前规则关注的谱类型内
String spectralQualifier = rule.getSpectralQualifier(); String spectralQualifier = rule.getSpectralQualifier();
@ -136,34 +128,32 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
.filter(entry -> cross.contains(entry.getKey())) .filter(entry -> cross.contains(entry.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
// 开始对交集中的核素进行条件判断 // 开始对交集中的核素进行条件判断
List<String> conditions = ListUtil.toList(conditionStr.split(comma)); ruleDto.setRuleId(rule.getId());
String ruleId = rule.getId(); ruleDto.setGroupId(rule.getContactGroup());
String groupId = rule.getContactGroup(); ruleDto.setConditions(rule.getConditions());
judge(ruleId,groupId,sampleId,betaOrGamma,dataSourceType,conditions,nuclidesCross); judge(ruleDto,nuclidesCross);
} }
} }
private void judge(String ruleId, private void judge(RuleDto ruleDto, Map<String,String> nuclidesCross){
String groupId,
String sampleId,
String betaOrGamma,
String dataSourceType,
List<String> conditions,
Map<String,String> nuclidesCross){
String ONE = "1";String TWO = "2";String THREE = "3"; String ONE = "1";String TWO = "2";String THREE = "3";
Set<String> nuclideNames = nuclidesCross.keySet(); Set<String> nuclideNames = nuclidesCross.keySet();
String alarmInfo = ""; String alarmInfo = "";
List<String> firstDetected; List<String> firstDetected;
List<NuclideInfo> moreThanAvg = new ArrayList<>(); List<NuclideInfo> moreThanAvg = new ArrayList<>();
String conditionStr = ruleDto.getConditions();
String betaOrGamma = ruleDto.getBetaOrGamma();
String datasource = ruleDto.getDatasource();
List<String> conditions = ListUtil.toList(conditionStr.split(comma));
for (String con : conditions) { for (String con : conditions) {
if (ONE.equals(con)){ // 首次发现该元素 if (ONE.equals(con)){ // 首次发现该元素
firstDetected = firstDetected(betaOrGamma,dataSourceType,nuclideNames); firstDetected = firstDetected(betaOrGamma,datasource,nuclideNames);
if (CollUtil.isNotEmpty(firstDetected)){ if (CollUtil.isNotEmpty(firstDetected)){
String message = "核素"+StrUtil.join(comma,firstDetected)+"首次发现"; String message = "核素"+StrUtil.join(comma,firstDetected)+"首次发现";
alarmInfo += message; alarmInfo += message;
} }
} else if (TWO.equals(con)) { // 元素浓度高于均值 } else if (TWO.equals(con)) { // 元素浓度高于均值
moreThanAvg = moreThanAvg(dataSourceType,nuclidesCross); moreThanAvg = moreThanAvg(datasource,nuclidesCross);
if (CollUtil.isNotEmpty(moreThanAvg)){ if (CollUtil.isNotEmpty(moreThanAvg)){
for (NuclideInfo nuclideInfo : moreThanAvg) { for (NuclideInfo nuclideInfo : moreThanAvg) {
String nuclide = nuclideInfo.getNuclide(); String nuclide = nuclideInfo.getNuclide();
@ -182,8 +172,7 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
if (StrUtil.isNotBlank(alarmInfo)){ if (StrUtil.isNotBlank(alarmInfo)){
// 保存报警日志 // 保存报警日志
AlarmAnalysisLog logInfo = new AlarmAnalysisLog(); AlarmAnalysisLog logInfo = new AlarmAnalysisLog();
logInfo.setRuleId(ruleId); BeanUtil.copyProperties(ruleDto,logInfo);
logInfo.setSampleId(sampleId);
if (alarmInfo.startsWith(comma)) if (alarmInfo.startsWith(comma))
alarmInfo = StrUtil.sub(alarmInfo, 1, alarmInfo.length()); alarmInfo = StrUtil.sub(alarmInfo, 1, alarmInfo.length());
logInfo.setAlarmInfo(alarmInfo); logInfo.setAlarmInfo(alarmInfo);
@ -191,6 +180,7 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
logInfo.setNuclideInfoList(moreThanAvg); logInfo.setNuclideInfoList(moreThanAvg);
logService.saveLog(logInfo); logService.saveLog(logInfo);
// 发送报警信息 // 发送报警信息
String groupId = ruleDto.getGroupId();
if (StrUtil.isNotBlank(groupId)) if (StrUtil.isNotBlank(groupId))
systemClient.sendMessage(alarmInfo,groupId, ALL.getValue()); systemClient.sendMessage(alarmInfo,groupId, ALL.getValue());
} }

View File

@ -6,6 +6,7 @@ import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.base.dto.RuleDto; import org.jeecg.modules.base.dto.RuleDto;
import org.quartz.*; import org.quartz.*;
import java.time.LocalDateTime;
import java.util.Map; import java.util.Map;
/** /**
@ -22,11 +23,13 @@ public class Test implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException { public void execute(JobExecutionContext context) throws JobExecutionException {
init(); init();
RuleDto ruleDto = new RuleDto(); RuleDto ruleDto = new RuleDto();
ruleDto.setStationId("101"); ruleDto.setStationId("205");
ruleDto.setSampleId("424249"); ruleDto.setSampleId("425496");
ruleDto.setBetaOrGamma("Gamma"); ruleDto.setBetaOrGamma("Gamma");
ruleDto.setFullOrPrel("FULL"); ruleDto.setFullOrPrel("FULL");
ruleDto.setDataSourceType("1"); ruleDto.setDatasource("1");
ruleDto.setSampleName("CAX05_001-20230624_0220_Q_FULL_299.3.PHD");
ruleDto.setCollectionDate(LocalDateTime.now());
Map<String, String> nuclides = MapUtil.newHashMap(); Map<String, String> nuclides = MapUtil.newHashMap();
nuclides.put("Be7","1000000"); nuclides.put("Be7","1000000");
nuclides.put("sss","1000000"); nuclides.put("sss","1000000");