样品统计分析接口添加核素数据校验
This commit is contained in:
parent
1f22a04d5c
commit
3b797f58c4
|
|
@ -4,6 +4,7 @@ import com.baomidou.dynamic.datasource.annotation.DS;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.api.vo.Result;
|
||||||
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.constant.CommonConstant;
|
||||||
import org.jeecg.common.util.DateUtils;
|
import org.jeecg.common.util.DateUtils;
|
||||||
|
|
@ -30,53 +31,54 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
|
||||||
|
|
||||||
public Result getSampleMonitorResult(String sampleType, Integer dataSource, Date startDate, Date endDate) {
|
public Result getSampleMonitorResult(String sampleType, Integer dataSource, Date startDate, Date endDate) {
|
||||||
Result result = new Result();
|
Result result = new Result();
|
||||||
result.setCode(CommonConstant.SC_OK_200);
|
try {
|
||||||
//声明返回用的结果map
|
result.setCode(CommonConstant.SC_OK_200);
|
||||||
Map<String, Object> resultMap = new HashMap<>();
|
//声明返回用的结果map
|
||||||
List<StationInfoData> StationInfoDataList = new ArrayList<>();
|
Map<String, Object> resultMap = new HashMap<>();
|
||||||
|
List<StationInfoData> StationInfoDataList = new ArrayList<>();
|
||||||
|
|
||||||
//region 局部变量
|
//region 局部变量
|
||||||
if (StringUtils.isBlank(sampleType)) {
|
if (StringUtils.isBlank(sampleType)) {
|
||||||
result.error500("SampleType Code cannot be null");
|
result.error500("SampleType Code cannot be null");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (Objects.isNull(startDate)) {
|
||||||
|
result.error500("The start time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
||||||
|
if (Objects.isNull(endDate)) {
|
||||||
|
result.error500("The end time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
||||||
|
//endregion
|
||||||
|
|
||||||
|
switch (dataSource) {
|
||||||
|
case 1:
|
||||||
|
StationInfoDataList = this.baseMapper.getRnAutoSampleResult(sampleType, startTime, endTime);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
StationInfoDataList = this.baseMapper.getRnManSampleResult(sampleType, startTime, endTime);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//时间段内有多少和台站
|
||||||
|
Map<String, List<StationInfoData>> groupedByMonth = StationInfoDataList.stream()
|
||||||
|
.collect(Collectors.groupingBy(station ->
|
||||||
|
station.getCollectStop().toInstant()
|
||||||
|
.atZone(ZoneId.of("UTC"))
|
||||||
|
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
|
||||||
|
));
|
||||||
|
resultMap.put("SampleMonitorResultList", groupedByMonth);
|
||||||
|
result.setSuccess(true);
|
||||||
|
result.setResult(resultMap);
|
||||||
|
return result;
|
||||||
|
} catch (Exception e) {
|
||||||
|
result.error500("样品监测回放错误:" + e.getMessage());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (Objects.isNull(startDate)) {
|
|
||||||
result.error500("The start time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
|
||||||
if (Objects.isNull(endDate)) {
|
|
||||||
result.error500("The end time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
|
||||||
//endregion
|
|
||||||
|
|
||||||
switch (dataSource) {
|
|
||||||
case 1:
|
|
||||||
StationInfoDataList = this.baseMapper.getRnAutoSampleResult(sampleType, startTime, endTime);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
StationInfoDataList = this.baseMapper.getRnManSampleResult(sampleType, startTime, endTime);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//时间段内有多少和台站
|
|
||||||
|
|
||||||
Map<String, List<StationInfoData>> groupedByMonth = StationInfoDataList.stream()
|
|
||||||
.collect(Collectors.groupingBy(station ->
|
|
||||||
station.getCollectStop().toInstant()
|
|
||||||
.atZone(ZoneId.of("UTC"))
|
|
||||||
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
|
|
||||||
));
|
|
||||||
|
|
||||||
|
|
||||||
resultMap.put("SampleMonitorResultList", groupedByMonth);
|
|
||||||
|
|
||||||
result.setSuccess(true);
|
|
||||||
result.setResult(resultMap);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -98,56 +100,62 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
|
||||||
String schemaName = dataSource == 1 ? "RNAUTO" : "RNMAN";
|
String schemaName = dataSource == 1 ? "RNAUTO" : "RNMAN";
|
||||||
//region 局部变量
|
//region 局部变量
|
||||||
Result result = new Result();
|
Result result = new Result();
|
||||||
result.setCode(CommonConstant.SC_OK_200);
|
try {
|
||||||
if (StringUtils.isBlank(stationCode)) {
|
result.setCode(CommonConstant.SC_OK_200);
|
||||||
result.error500("Station Code cannot be null");
|
if (StringUtils.isBlank(stationCode)) {
|
||||||
|
result.error500("Station Code cannot be null");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (Objects.isNull(startDate)) {
|
||||||
|
result.error500("The start time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
||||||
|
if (Objects.isNull(endDate)) {
|
||||||
|
result.error500("The end time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
||||||
|
//endregion
|
||||||
|
switch (dataSource) {
|
||||||
|
//RNAUTO
|
||||||
|
case 1:
|
||||||
|
//获取样品中识别到的核素集合
|
||||||
|
nuclideActConcIntvlList = this.baseMapper.getRnAutoIdentifiedNuclides(stationCode, startTime, endTime);
|
||||||
|
|
||||||
|
//核素等级时序分析
|
||||||
|
sampleLevelDataList = this.baseMapper.getRnAutoNuclideTimeSeriesAnalysis(stationCode, startTime, endTime);
|
||||||
|
break;
|
||||||
|
//RNMAN
|
||||||
|
case 2:
|
||||||
|
//获取样品中识别到的核素集合
|
||||||
|
nuclideActConcIntvlList = this.baseMapper.getRnManIdentifiedNuclides(stationCode, startTime, endTime);
|
||||||
|
|
||||||
|
//核素等级时序分析
|
||||||
|
sampleLevelDataList = this.baseMapper.getRnManNuclideTimeSeriesAnalysis(stationCode, startTime, endTime);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//key=核素名称,value=获取样品中识别到的核素集合
|
||||||
|
Map<String, List<NuclideActConcIntvl>> groupedByNuclideName = nuclideActConcIntvlList.stream()
|
||||||
|
.filter(p -> p.getNuclideName() != null)
|
||||||
|
.collect(Collectors.groupingBy(NuclideActConcIntvl::getNuclideName));
|
||||||
|
//查询级别 getSample
|
||||||
|
List<String> nuclideNames = new ArrayList<>(groupedByNuclideName.keySet());
|
||||||
|
if (CollectionUtils.isNotEmpty(nuclideNames)) {
|
||||||
|
//通过台站ID、核素名称查找阈值
|
||||||
|
thresholdResultHisDataList = this.baseMapper.selectByStationAndNuclides(schemaName, Integer.valueOf(stationCode), nuclideNames, startTime, endTime);
|
||||||
|
}
|
||||||
|
resultMap.put("nuclideActConcIntvlList", groupedByNuclideName);
|
||||||
|
resultMap.put("sampleLevelDataList", sampleLevelDataList);
|
||||||
|
resultMap.put("thresholdResultHisDataList", thresholdResultHisDataList);
|
||||||
|
result.setSuccess(true);
|
||||||
|
result.setResult(resultMap);
|
||||||
|
return result;
|
||||||
|
} catch (Exception e) {
|
||||||
|
result.error500("样品统计分析错误:" + e.getMessage());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (Objects.isNull(startDate)) {
|
|
||||||
result.error500("The start time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
|
||||||
if (Objects.isNull(endDate)) {
|
|
||||||
result.error500("The end time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
|
||||||
//endregion
|
|
||||||
switch (dataSource) {
|
|
||||||
//RNAUTO
|
|
||||||
case 1:
|
|
||||||
//获取样品中识别到的核素集合
|
|
||||||
nuclideActConcIntvlList = this.baseMapper.getRnAutoIdentifiedNuclides(stationCode, startTime, endTime);
|
|
||||||
|
|
||||||
//核素等级时序分析
|
|
||||||
sampleLevelDataList = this.baseMapper.getRnAutoNuclideTimeSeriesAnalysis(stationCode, startTime, endTime);
|
|
||||||
break;
|
|
||||||
//RNMAN
|
|
||||||
case 2:
|
|
||||||
//获取样品中识别到的核素集合
|
|
||||||
nuclideActConcIntvlList = this.baseMapper.getRnManIdentifiedNuclides(stationCode, startTime, endTime);
|
|
||||||
|
|
||||||
//核素等级时序分析
|
|
||||||
sampleLevelDataList = this.baseMapper.getRnManNuclideTimeSeriesAnalysis(stationCode, startTime, endTime);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//key=核素名称,value=获取样品中识别到的核素集合
|
|
||||||
Map<String, List<NuclideActConcIntvl>> groupedByNuclideName = nuclideActConcIntvlList.stream()
|
|
||||||
.filter(p -> p.getNuclideName() != null)
|
|
||||||
.collect(Collectors.groupingBy(NuclideActConcIntvl::getNuclideName));
|
|
||||||
//查询级别 getSample
|
|
||||||
List<String> nuclideNames = new ArrayList<>(groupedByNuclideName.keySet());
|
|
||||||
//通过台站ID、核素名称查找阈值
|
|
||||||
thresholdResultHisDataList = this.baseMapper.selectByStationAndNuclides(schemaName, Integer.valueOf(stationCode), nuclideNames, startTime, endTime);
|
|
||||||
|
|
||||||
resultMap.put("nuclideActConcIntvlList", groupedByNuclideName);
|
|
||||||
resultMap.put("sampleLevelDataList", sampleLevelDataList);
|
|
||||||
resultMap.put("thresholdResultHisDataList", thresholdResultHisDataList);
|
|
||||||
result.setSuccess(true);
|
|
||||||
result.setResult(resultMap);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -163,43 +171,46 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
|
||||||
List<SampleLevelData> sampleDataList = new ArrayList<>();
|
List<SampleLevelData> sampleDataList = new ArrayList<>();
|
||||||
//region 局部变量
|
//region 局部变量
|
||||||
Result result = new Result();
|
Result result = new Result();
|
||||||
result.setCode(CommonConstant.SC_OK_200);
|
try {
|
||||||
if (StringUtils.isBlank(sampleType)) {
|
result.setCode(CommonConstant.SC_OK_200);
|
||||||
result.error500("SampleType Code cannot be null");
|
if (StringUtils.isBlank(sampleType)) {
|
||||||
|
result.error500("SampleType Code cannot be null");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(station)) {
|
||||||
|
result.error500("Station Code cannot be null");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (Objects.isNull(startDate)) {
|
||||||
|
result.error500("The start time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
||||||
|
if (Objects.isNull(endDate)) {
|
||||||
|
result.error500("The end time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
||||||
|
//endregion
|
||||||
|
switch (dataSource) {
|
||||||
|
case 1:
|
||||||
|
sampleDataList = this.baseMapper.getRnAutoSampleGradeAnalysis(sampleType, station, startTime, endTime);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
sampleDataList = this.baseMapper.getRnManSampleGradeAnalysis(sampleType, station, startTime, endTime);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
resultMap.put("sampleDataList", sampleDataList);
|
||||||
|
result.setSuccess(true);
|
||||||
|
result.setResult(resultMap);
|
||||||
|
return result;
|
||||||
|
} catch (Exception e) {
|
||||||
|
result.error500("样品统计分析错误:" + e.getMessage());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (StringUtils.isBlank(station)) {
|
|
||||||
result.error500("Station Code cannot be null");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
if (Objects.isNull(startDate)) {
|
|
||||||
result.error500("The start time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
|
||||||
if (Objects.isNull(endDate)) {
|
|
||||||
result.error500("The end time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
|
||||||
//endregion
|
|
||||||
switch (dataSource) {
|
|
||||||
case 1:
|
|
||||||
sampleDataList = this.baseMapper.getRnAutoSampleGradeAnalysis(sampleType, station, startTime, endTime);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
sampleDataList = this.baseMapper.getRnManSampleGradeAnalysis(sampleType, station, startTime, endTime);
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
resultMap.put("sampleDataList", sampleDataList);
|
|
||||||
result.setSuccess(true);
|
|
||||||
result.setResult(resultMap);
|
|
||||||
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** 样品活度浓度区间频率分析
|
/*** 样品活度浓度区间频率分析
|
||||||
|
|
@ -219,86 +230,92 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
|
||||||
List<NuclideActConcIntvl> nuclideActConcIntvls = new ArrayList<>();
|
List<NuclideActConcIntvl> nuclideActConcIntvls = new ArrayList<>();
|
||||||
//region 局部变量
|
//region 局部变量
|
||||||
Result result = new Result();
|
Result result = new Result();
|
||||||
result.setCode(CommonConstant.SC_OK_200);
|
try {
|
||||||
if (StringUtils.isBlank(sampleType)) {
|
result.setCode(CommonConstant.SC_OK_200);
|
||||||
result.error500("SampleType Code cannot be null");
|
if (StringUtils.isBlank(sampleType)) {
|
||||||
|
result.error500("SampleType Code cannot be null");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(nuclideName)) {
|
||||||
|
result.error500("nuclideName Code cannot be null");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(station)) {
|
||||||
|
result.error500("Station Code cannot be null");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (Objects.isNull(startDate)) {
|
||||||
|
result.error500("The start time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
||||||
|
if (Objects.isNull(endDate)) {
|
||||||
|
result.error500("The end time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
||||||
|
//endregion
|
||||||
|
|
||||||
|
//根据数据源、样品类型查询样品的浓度
|
||||||
|
switch (sampleType) {
|
||||||
|
case "P":
|
||||||
|
switch (dataSource) {
|
||||||
|
//RNAUTO
|
||||||
|
case 1:
|
||||||
|
nuclideActConcIntvls = this.baseMapper.getRnautoPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
|
break;
|
||||||
|
//RNMAN
|
||||||
|
case 2:
|
||||||
|
nuclideActConcIntvls = this.baseMapper.getRnautoNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "B":
|
||||||
|
switch (dataSource) {
|
||||||
|
case 1:
|
||||||
|
nuclideActConcIntvls = this.baseMapper.getRnmanPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
nuclideActConcIntvls = this.baseMapper.getRnmanNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取浓度出现的次数
|
||||||
|
//获取浓度值集合
|
||||||
|
List<Double> data = DistributionAnalysisToolkit.convertConcToDoubleList(nuclideActConcIntvls);
|
||||||
|
// 设置区间参数
|
||||||
|
double start = 0; // 区间起始值
|
||||||
|
double step = 200; // 区间步长(宽度)
|
||||||
|
|
||||||
|
|
||||||
|
// 1. 区间统计
|
||||||
|
List<DistributionAnalysisToolkit.IntervalStat> stats = DistributionAnalysisToolkit.calculateIntervalStats(nuclideActConcIntvls, start, step);
|
||||||
|
// 3. 累积分布函数
|
||||||
|
List<DistributionAnalysisToolkit.CDFPoint> cdfPoints = DistributionAnalysisToolkit.calculateCDF(data);
|
||||||
|
// 4. 核密度估计
|
||||||
|
List<DistributionAnalysisToolkit.KDEPoint> kdePoints = DistributionAnalysisToolkit.autoKDE(data, DistributionAnalysisToolkit.GAUSSIAN_KERNEL);
|
||||||
|
//获取所有浓度的累积
|
||||||
|
List<Double> cumulative = DistributionAnalysisToolkit.cumulativeSum(data);
|
||||||
|
//获取95%累积线
|
||||||
|
double percentile95 = DistributionAnalysisToolkit.calculate95thPercentile(data);
|
||||||
|
|
||||||
|
resultMap.put("stats", stats);
|
||||||
|
resultMap.put("cdfPoints", cdfPoints);
|
||||||
|
resultMap.put("kdePoints", kdePoints);
|
||||||
|
resultMap.put("cumulative", cumulative);
|
||||||
|
resultMap.put("percentile95", percentile95);
|
||||||
|
result.setSuccess(true);
|
||||||
|
result.setResult(resultMap);
|
||||||
|
return result;
|
||||||
|
} catch (Exception e) {
|
||||||
|
result.error500("样品活度浓度区间频率分析错误:" + e.getMessage());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (StringUtils.isBlank(nuclideName)) {
|
|
||||||
result.error500("nuclideName Code cannot be null");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
if (StringUtils.isBlank(station)) {
|
|
||||||
result.error500("Station Code cannot be null");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
if (Objects.isNull(startDate)) {
|
|
||||||
result.error500("The start time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
|
||||||
if (Objects.isNull(endDate)) {
|
|
||||||
result.error500("The end time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
|
||||||
//endregion
|
|
||||||
|
|
||||||
//根据数据源、样品类型查询样品的浓度
|
|
||||||
switch (sampleType) {
|
|
||||||
case "P":
|
|
||||||
switch (dataSource) {
|
|
||||||
//RNAUTO
|
|
||||||
case 1:
|
|
||||||
nuclideActConcIntvls = this.baseMapper.getRnautoPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
|
||||||
break;
|
|
||||||
//RNMAN
|
|
||||||
case 2:
|
|
||||||
nuclideActConcIntvls = this.baseMapper.getRnautoNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "B":
|
|
||||||
switch (dataSource) {
|
|
||||||
case 1:
|
|
||||||
nuclideActConcIntvls = this.baseMapper.getRnmanPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
nuclideActConcIntvls = this.baseMapper.getRnmanNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//获取浓度出现的次数
|
|
||||||
//获取浓度值集合
|
|
||||||
List<Double> data = DistributionAnalysisToolkit.convertConcToDoubleList(nuclideActConcIntvls);
|
|
||||||
// 设置区间参数
|
|
||||||
double start = 0; // 区间起始值
|
|
||||||
double step = 200; // 区间步长(宽度)
|
|
||||||
|
|
||||||
|
|
||||||
// 1. 区间统计
|
|
||||||
List<DistributionAnalysisToolkit.IntervalStat> stats = DistributionAnalysisToolkit.calculateIntervalStats(nuclideActConcIntvls, start, step);
|
|
||||||
// 3. 累积分布函数
|
|
||||||
List<DistributionAnalysisToolkit.CDFPoint> cdfPoints = DistributionAnalysisToolkit.calculateCDF(data);
|
|
||||||
// 4. 核密度估计
|
|
||||||
List<DistributionAnalysisToolkit.KDEPoint> kdePoints = DistributionAnalysisToolkit.autoKDE(data, DistributionAnalysisToolkit.GAUSSIAN_KERNEL);
|
|
||||||
//获取所有浓度的累积
|
|
||||||
List<Double> cumulative = DistributionAnalysisToolkit.cumulativeSum(data);
|
|
||||||
//获取95%累积线
|
|
||||||
double percentile95 = DistributionAnalysisToolkit.calculate95thPercentile(data);
|
|
||||||
|
|
||||||
resultMap.put("stats", stats);
|
|
||||||
resultMap.put("cdfPoints", cdfPoints);
|
|
||||||
resultMap.put("kdePoints", kdePoints);
|
|
||||||
resultMap.put("cumulative", cumulative);
|
|
||||||
resultMap.put("percentile95", percentile95);
|
|
||||||
result.setSuccess(true);
|
|
||||||
result.setResult(resultMap);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** 核素活度浓度时序分析
|
/*** 核素活度浓度时序分析
|
||||||
|
|
@ -314,75 +331,82 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
|
||||||
@Override
|
@Override
|
||||||
public Result getSampleActConcTimeSeqAnalysis(String sampleType, String station, String nuclideName, Integer dataSource, Date startDate, Date endDate) {
|
public Result getSampleActConcTimeSeqAnalysis(String sampleType, String station, String nuclideName, Integer dataSource, Date startDate, Date endDate) {
|
||||||
Result result = new Result();
|
Result result = new Result();
|
||||||
result.setCode(CommonConstant.SC_OK_200);
|
|
||||||
//声明返回用的结果map
|
//声明返回用的结果map
|
||||||
Map<String, Object> resultMap = new HashMap<>();
|
Map<String, Object> resultMap = new HashMap<>();
|
||||||
//region 局部变量
|
try {
|
||||||
|
result.setCode(CommonConstant.SC_OK_200);
|
||||||
|
|
||||||
if (StringUtils.isBlank(sampleType)) {
|
//region 局部变量
|
||||||
result.error500("SampleType Code cannot be null");
|
|
||||||
return result;
|
if (StringUtils.isBlank(sampleType)) {
|
||||||
}
|
result.error500("SampleType Code cannot be null");
|
||||||
if (StringUtils.isBlank(nuclideName)) {
|
return result;
|
||||||
result.error500("nuclideName Code cannot be null");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
if (StringUtils.isBlank(station)) {
|
|
||||||
result.error500("Station Code cannot be null");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
if (Objects.isNull(startDate)) {
|
|
||||||
result.error500("The start time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
|
||||||
if (Objects.isNull(endDate)) {
|
|
||||||
result.error500("The end time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
|
||||||
//endregion
|
|
||||||
//获取样品阈值级别和阈值
|
|
||||||
List<SampleLevelData> sampleDatas = new ArrayList<>();
|
|
||||||
//核素的阈值
|
|
||||||
List<GardsThresholdResultHis> thresholdResultHisList = new ArrayList<>();
|
|
||||||
List<NuclideActConcIntvl> nuclideActConcIntvls = new ArrayList<>();
|
|
||||||
nuclideActConcIntvls = switch (sampleType) {
|
|
||||||
case "P" -> {
|
|
||||||
sampleDatas = this.baseMapper.getRnAutoSampleLevel(station, startTime, endTime);
|
|
||||||
yield switch (dataSource) {
|
|
||||||
//RNAUTO
|
|
||||||
case 1 ->
|
|
||||||
this.baseMapper.getRnautoPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
|
||||||
//RNMAN
|
|
||||||
case 2 ->
|
|
||||||
this.baseMapper.getRnautoNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
|
||||||
default -> nuclideActConcIntvls;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
case "B" -> {
|
if (StringUtils.isBlank(nuclideName)) {
|
||||||
sampleDatas = this.baseMapper.getRnManSampleLevel(station, startTime, endTime);
|
result.error500("nuclideName Code cannot be null");
|
||||||
yield switch (dataSource) {
|
return result;
|
||||||
case 1 ->
|
|
||||||
this.baseMapper.getRnmanPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
|
||||||
case 2 ->
|
|
||||||
this.baseMapper.getRnmanNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
|
||||||
default -> nuclideActConcIntvls;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
default -> nuclideActConcIntvls;
|
if (StringUtils.isBlank(station)) {
|
||||||
};
|
result.error500("Station Code cannot be null");
|
||||||
String schemaName = dataSource == 1 ? "RNAUTO" : "RNMAN";
|
return result;
|
||||||
|
}
|
||||||
|
if (Objects.isNull(startDate)) {
|
||||||
|
result.error500("The start time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
||||||
|
if (Objects.isNull(endDate)) {
|
||||||
|
result.error500("The end time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
||||||
|
//endregion
|
||||||
|
//获取样品阈值级别和阈值
|
||||||
|
List<SampleLevelData> sampleDatas = new ArrayList<>();
|
||||||
|
//核素的阈值
|
||||||
|
List<GardsThresholdResultHis> thresholdResultHisList = new ArrayList<>();
|
||||||
|
List<NuclideActConcIntvl> nuclideActConcIntvls = new ArrayList<>();
|
||||||
|
nuclideActConcIntvls = switch (sampleType) {
|
||||||
|
case "P" -> {
|
||||||
|
sampleDatas = this.baseMapper.getRnAutoSampleLevel(station, startTime, endTime);
|
||||||
|
yield switch (dataSource) {
|
||||||
|
//RNAUTO
|
||||||
|
case 1 ->
|
||||||
|
this.baseMapper.getRnautoPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
|
//RNMAN
|
||||||
|
case 2 ->
|
||||||
|
this.baseMapper.getRnautoNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
|
default -> nuclideActConcIntvls;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
case "B" -> {
|
||||||
|
sampleDatas = this.baseMapper.getRnManSampleLevel(station, startTime, endTime);
|
||||||
|
yield switch (dataSource) {
|
||||||
|
case 1 ->
|
||||||
|
this.baseMapper.getRnmanPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
|
case 2 ->
|
||||||
|
this.baseMapper.getRnmanNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
|
default -> nuclideActConcIntvls;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
default -> nuclideActConcIntvls;
|
||||||
|
};
|
||||||
|
String schemaName = dataSource == 1 ? "RNAUTO" : "RNMAN";
|
||||||
|
|
||||||
thresholdResultHisList = this.baseMapper.selectByCondition(schemaName, Arrays.asList(Integer.valueOf(station))
|
thresholdResultHisList = this.baseMapper.selectByCondition(schemaName, Arrays.asList(Integer.valueOf(station))
|
||||||
, Arrays.asList(nuclideName), startTime, endTime);
|
, Arrays.asList(nuclideName), startTime, endTime);
|
||||||
resultMap.put("sampleDataList", sampleDatas);
|
resultMap.put("sampleDataList", sampleDatas);
|
||||||
resultMap.put("nuclideInfoList", nuclideActConcIntvls);
|
resultMap.put("nuclideInfoList", nuclideActConcIntvls);
|
||||||
resultMap.put("thresholdResultHisList", thresholdResultHisList);
|
resultMap.put("thresholdResultHisList", thresholdResultHisList);
|
||||||
|
|
||||||
|
result.setSuccess(true);
|
||||||
|
result.setResult(resultMap);
|
||||||
|
return result;
|
||||||
|
} catch (Exception e) {
|
||||||
|
result.error500("核素活度浓度时序分析错误:" + e.getMessage());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
result.setSuccess(true);
|
|
||||||
result.setResult(resultMap);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** 核素活度浓度对比分析
|
/*** 核素活度浓度对比分析
|
||||||
|
|
@ -396,43 +420,48 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public Result getNuclideActivityConcAnalyze(String sampleType, Integer[] stationIds, String nuclideName, Integer dataSource, Date startDate, Date endDate) {
|
public Result getNuclideActivityConcAnalyze(String sampleType, Integer[] stationIds, String nuclideName, Integer dataSource, Date startDate, Date endDate) {
|
||||||
|
|
||||||
Result result = new Result();
|
|
||||||
result.setCode(CommonConstant.SC_OK_200);
|
|
||||||
Map<String, Object> resultMap = new HashMap<>();
|
Map<String, Object> resultMap = new HashMap<>();
|
||||||
List<NuclideActConcIntvl> nuclideActConcIntvls = new ArrayList<>();
|
List<NuclideActConcIntvl> nuclideActConcIntvls = new ArrayList<>();
|
||||||
//region 局部变量
|
|
||||||
if (Objects.isNull(startDate)) {
|
|
||||||
result.error500("The start time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
|
||||||
if (Objects.isNull(endDate)) {
|
|
||||||
result.error500("The end time cannot be empty");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
|
||||||
|
|
||||||
if (Objects.isNull(stationIds)) {
|
Result result = new Result();
|
||||||
|
try {
|
||||||
|
result.setCode(CommonConstant.SC_OK_200);
|
||||||
|
|
||||||
|
//region 局部变量
|
||||||
|
if (Objects.isNull(startDate)) {
|
||||||
|
result.error500("The start time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String startTime = DateUtils.formatDate(startDate, "yyyy-MM-dd") + " 00:00:00";
|
||||||
|
if (Objects.isNull(endDate)) {
|
||||||
|
result.error500("The end time cannot be empty");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String endTime = DateUtils.formatDate(endDate, "yyyy-MM-dd") + " 23:59:59";
|
||||||
|
|
||||||
|
if (Objects.isNull(stationIds)) {
|
||||||
|
result.setSuccess(true);
|
||||||
|
result.setResult(Collections.emptyList());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
//endregion
|
||||||
|
switch (dataSource) {
|
||||||
|
case 1:
|
||||||
|
nuclideActConcIntvls = this.baseMapper.getRnAutoAnalyzeNuclideActivityConc(sampleType, nuclideName, stationIds, startTime, endTime);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
nuclideActConcIntvls = this.baseMapper.getRnManAnalyzeNuclideActivityConc(sampleType, nuclideName, stationIds, startTime, endTime);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
resultMap.put("nuclideInfoList", nuclideActConcIntvls);
|
||||||
result.setSuccess(true);
|
result.setSuccess(true);
|
||||||
result.setResult(Collections.emptyList());
|
result.setResult(resultMap);
|
||||||
|
return result;
|
||||||
|
} catch (Exception e) {
|
||||||
|
result.error500("核素活度浓度对比分析错误:" + e.getMessage());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
//endregion
|
|
||||||
switch (dataSource) {
|
|
||||||
case 1:
|
|
||||||
nuclideActConcIntvls = this.baseMapper.getRnAutoAnalyzeNuclideActivityConc(sampleType, nuclideName, stationIds, startTime, endTime);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
nuclideActConcIntvls = this.baseMapper.getRnManAnalyzeNuclideActivityConc(sampleType, nuclideName, stationIds, startTime, endTime);
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
resultMap.put("nuclideInfoList", nuclideActConcIntvls);
|
|
||||||
result.setSuccess(true);
|
|
||||||
result.setResult(resultMap);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user