feat:核素浓度均值台站类型过滤

This commit is contained in:
nieziyan 2024-03-05 18:26:02 +08:00
parent 6e54bce336
commit 6ac9576cb1
3 changed files with 95 additions and 18 deletions

View File

@ -9,4 +9,8 @@ public interface DictConstant {
String ANALYSE_SOURCE = "alarm_analyse_rule_source";
String DATASOURCE_TYPE = "database_type";
String NOBLE_GAS_BETAGAMMA = "Noble Gas Beta-Gamma";
String NOBLE_GAS_HPGE = "Noble Gas HPGe";
}

View File

@ -0,0 +1,11 @@
package org.jeecg.modules.base.enums;
import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor
public enum StationType {
BETA, GAMMA, NULL
}

View File

@ -2,16 +2,25 @@ package org.jeecg.modules.service.impl;
import cn.hutool.core.collection.CollUtil;
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.config.mqtoken.UserTokenContext;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.DateConstant;
import org.jeecg.common.constant.DictConstant;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.dto.ConcDtoXe;
import org.jeecg.modules.base.entity.configuration.GardsStations;
import org.jeecg.modules.base.entity.postgre.AlarmAnalysisNuclideAvg;
import org.jeecg.modules.base.entity.postgre.AlarmAnalysisNuclideParam;
import org.jeecg.modules.base.entity.postgre.AlarmAnalysisRule;
import org.jeecg.modules.base.enums.StationType;
import org.jeecg.modules.feignclient.SystemClient;
import org.jeecg.modules.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -24,6 +33,8 @@ import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import static org.jeecg.common.util.TokenUtils.getTempToken;
@Slf4j
@Service
public class CalculateConcServiceImpl implements CalculateConcService {
@ -49,6 +60,16 @@ public class CalculateConcServiceImpl implements CalculateConcService {
@Autowired
private IAlarmAnalysisNuclideParamService nuclideParamService;
@Autowired
private RedisUtil redisUtil;
@Autowired
private SystemClient systemClient;
private List<String> beta;
private Map<String, GardsStations> stations;
@Override
public void calcAndSave() {
try {
@ -87,42 +108,54 @@ public class CalculateConcServiceImpl implements CalculateConcService {
params.put("startDate",startDate + DateConstant.TIME_START);
params.put("endDate",endDate + DateConstant.TIME_END);
List<AlarmAnalysisNuclideAvg> autoAvgs = new ArrayList<>(); // Auto
List<AlarmAnalysisNuclideAvg> manAvgs = new ArrayList<>(); // Man
// 遍历所有台站 计算每个台站的所有核素浓度均值
/* Auto自动处理 */
List<AlarmAnalysisNuclideAvg> autoAvgs = new ArrayList<>();
init();
for (Map.Entry<String, Set<String>> entry : nuclideMap.entrySet()) {
String station = entry.getKey();
Set<String> nuclides = entry.getValue();
// 查询指定台站的所有的核素浓度 并计算核素浓度均值
params.put("stationId", station);
List<ConcDtoXe> xeConcAuto = xeResultsAutoService.getConc(params, nuclides); // beta-gamma
params.put("nuclideName", nuclides);
List<ConcDto> nuclConcAuto = nuclIdedAutoService.getConc(params); // gamma
StationType stationType = stationType(station);
List<ConcDtoXe> xeConcAuto = new ArrayList<>();
List<ConcDtoXe> xeConcMan = new ArrayList<>();
List<ConcDto> nuclConcAuto = new ArrayList<>();
List<ConcDto> nuclConcMan = new ArrayList<>();
switch (stationType){
case BETA:
xeConcAuto = xeResultsAutoService.getConc(params, nuclides); // beta-gamma Auto
xeConcMan = xeResultsManService.getConc(params, nuclides); // beta-gamma Man
break;
case GAMMA:
params.put("nuclideName", nuclides);
nuclConcAuto = nuclIdedAutoService.getConc(params); // gamma Auto
nuclConcMan = nuclIdedManService.getConc(params); // gamma Man
break;
case NULL:
xeConcAuto = xeResultsAutoService.getConc(params, nuclides); // beta-gamma Auto
xeConcMan = xeResultsManService.getConc(params, nuclides); // beta-gamma Man
params.put("nuclideName", nuclides);
nuclConcAuto = nuclIdedAutoService.getConc(params); // gamma Auto
nuclConcMan = nuclIdedManService.getConc(params); // gamma Man
break;
default:
break;
}
// Auto
Map<String, String> autoResult = new HashMap<>();
autoResult.putAll(calculate(concDto(xeConcAuto), index));
autoResult.putAll(calculate(nuclConcAuto, index));
for (String nuclide : nuclides) {
String val = autoResult.get(nuclide);
AlarmAnalysisNuclideAvg analysisNuclideAvg = new AlarmAnalysisNuclideAvg(station, nuclide, val);
analysisNuclideAvg.setDataSourceType(CommonConstant.ARMDARR);
autoAvgs.add(analysisNuclideAvg);
}
}
/* Man人工交互 */
List<AlarmAnalysisNuclideAvg> manAvgs = new ArrayList<>();
for (Map.Entry<String, Set<String>> entry : nuclideMap.entrySet()) {
String station = entry.getKey();
Set<String> nuclides = entry.getValue();
// 查询指定台站的所有的核素浓度 并计算核素浓度均值
params.put("stationId", station);
List<ConcDtoXe> xeConcMan = xeResultsManService.getConc(params, nuclides); // beta-gamma
params.put("nuclideName", nuclides);
List<ConcDto> nuclConcMan = nuclIdedManService.getConc(params); // gamma
// Man
Map<String,String> manResult = new HashMap<>();
manResult.putAll(calculate(concDto(xeConcMan), index));
manResult.putAll(calculate(nuclConcMan, index));
for (String nuclide : nuclides) {
String val = manResult.get(nuclide);
AlarmAnalysisNuclideAvg analysisNuclideAvg = new AlarmAnalysisNuclideAvg(station, nuclide, val);
@ -149,6 +182,7 @@ public class CalculateConcServiceImpl implements CalculateConcService {
@Override
public Map<String, String> calculate(List<ConcDto> concDtos, BigDecimal index) {
Map<String, String> result = new HashMap<>();
if (CollUtil.isEmpty(concDtos)) return result;
// 按照核素名进行分组
Map<String, List<ConcDto>> concDtoMap = concDtos.stream()
.collect(Collectors.groupingBy(ConcDto::getNuclideName));
@ -186,4 +220,32 @@ public class CalculateConcServiceImpl implements CalculateConcService {
String nuclide = CollUtil.join(nuclideNames, ",");
return "核素 [" + nuclide + "] 进行了浓度均值计算";
}
private void init(){
try {
stations = (Map<String, GardsStations>) redisUtil.get("stationInfoMap");
UserTokenContext.setToken(getTempToken());
// 获取Beta台站类型字典
beta = systemClient.getItems(DictConstant.NOBLE_GAS_BETAGAMMA).stream()
.map(DictModel::getValue).collect(Collectors.toList());
}catch (Exception e){
log.error("核素浓度均值计算时, 获取台站类型字典异常: {}", e.getMessage());
}finally {
UserTokenContext.remove();
}
}
private StationType stationType(String stationId){
if (MapUtil.isEmpty(stations))
return StationType.NULL;
GardsStations station = stations.get(stationId);
if (ObjectUtil.isNull(station) || StrUtil.isBlank(station.getType()))
return StationType.NULL;
if (CollUtil.isEmpty(beta))
return StationType.NULL;
String stationType = station.getType();
if (CollUtil.contains(beta, stationType))
return StationType.BETA;
return StationType.GAMMA;
}
}