feat:完善
This commit is contained in:
parent
da69a39e95
commit
2a8ccef920
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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");
|
||||||
|
|
Loading…
Reference in New Issue
Block a user