修改数据分析

This commit is contained in:
duwenyuan 2025-12-22 21:23:06 +08:00
parent c2731e421c
commit 290493fa34
7 changed files with 288 additions and 118 deletions

View File

@ -1,6 +1,8 @@
package org.jeecg.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@ -15,4 +17,10 @@ public class GardsThresholdResultHis {
private double percentile75;
private Date calculationTime;
private Long idAnalysis;
/** 收集停止时间
*
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date collectStop;
}

View File

@ -2,6 +2,7 @@ package org.jeecg.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@ -12,62 +13,78 @@ public class NuclideActConcIntvl {
/** 样品ID
*
*/
@JsonProperty("SAMPLEID")
private Integer sampleId;
/**
* 级别
*/
@JsonProperty("CATEGORY")
private Integer category;
/**
* 阈值
*/
@JsonProperty("THRESHOLDVALUE")
private double thresholdValue;
/**样品类型
* 系统类型P : particulate; B :gas with 3-D β-γ coincidence detection; G :all other gas systems (high-resolution
* γ-spectrometry or 2-D β-γ coincidence
* detection)
*/
@JsonProperty("SAMPLE_TYPE")
private String sampleType;
/** 台站ID
*
*/
@JsonProperty("STATIONID")
private Integer stationId;
/** 台站编码
*
*/
@JsonProperty("STATIONCODE")
private String stationCode;
/**数据源
*
*/
@JsonProperty("DATASOURCE")
private Integer dataSource;
/** MDC
*
*/
@JsonProperty("MDC")
private Double mdc;
/** 活度浓度
*
*/
@JsonProperty("CONC")
private Double conc;
/** 收集停止时间
*
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonProperty("COLLECTSTOP")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date collectStop;
/**
* 活度值不确定度
*/
@JsonProperty("CONCERR")
private Double concErr;
/**
* 样品处理状态
*/
@JsonProperty("STATUS")
private String status;
/**
* 核素名称
*/
@JsonProperty("NUCLIDE_NAME")
private String nuclideName;
}

View File

@ -1,6 +1,8 @@
package org.jeecg.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@ -11,14 +13,34 @@ public class SampleLevelData {
* 样品ID
*/
private Integer sampleId;
/**
* 采集停止时间
/** 收集停止时间
*
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date collectStop;
/**
* 级别
*/
private Integer category;
/** 活度浓度
*
*/
private Double conc;
/**
* 活度值不确定度
*/
private Double concErr;
/** MDC
*
*/
private Double mdc;
/**
* 阈值
*/
private Double thresholdValue;
}

View File

@ -44,6 +44,12 @@ public interface GardsSampleStatAnalysisMapper extends BaseMapper<GardsSampleDat
List<SampleLevelData> getRnManSampleLevel(String station, @Param("startTime") String startTime, @Param("endTime") String endTime);
List<SampleLevelData> getNuclideTimeSeriesAnalysis (@Param("schemaName") String schemaName ,@Param("station")String station,@Param("nuclideName")String nuclideName, @Param("startTime") String startTime, @Param("endTime") String endTime);
//endregion
//region RNAUTO 获取样品中元素的浓度活度MDC信息

View File

@ -41,8 +41,8 @@
ON t1.SAMPLE_ID = t2.SAMPLE_ID
WHERE t1.STATION_ID = #{station}
AND t1.SAMPLE_TYPE = #{sampleType}
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
</select>
@ -56,8 +56,8 @@
ON t1.SAMPLE_ID = t2.SAMPLE_ID
WHERE t1.STATION_ID = #{station}
AND t1.SAMPLE_TYPE = #{sampleType}
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
</select>
@ -73,8 +73,8 @@
RNAUTO.GARDS_ANALYSES b
WHERE a.SAMPLE_ID = b.SAMPLE_ID
AND a.STATION_ID = #{station}
AND a.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND a.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
</select>
<select id="getRnManSampleLevel" resultType="org.jeecg.entity.SampleLevelData">
@ -85,8 +85,8 @@
RNMAN.GARDS_ANALYSES b
WHERE a.SAMPLE_ID = b.SAMPLE_ID
AND a.STATION_ID = #{station}
AND a.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND a.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
</select>
@ -112,8 +112,8 @@
WHERE a.SAMPLE_TYPE = #{sampleType}
AND a.STATION_ID = #{station}
AND b.NUCLIDENAME = #{nuclideName}
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
</select>
<!-- 获取样品类型=气体 元素的浓度活度、MDC信息-->
@ -134,8 +134,8 @@
WHERE a.SAMPLE_TYPE = '#{sampleType}'
AND a.STATION_ID = #{station}
AND b.NUCLIDENAME = #{nuclideName}
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
</select>
@ -158,8 +158,8 @@
WHERE a.SAMPLE_TYPE = '#{sampleType}'
AND a.STATION_ID = #{station}
AND b.NUCLIDENAME = #{nuclideName}
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
</select>
<!-- 获取样品类型=气体 元素的浓度活度、MDC信息-->
@ -180,8 +180,8 @@
WHERE a.SAMPLE_TYPE = '#{sampleType}'
AND a.STATION_ID = #{station}
AND b.NUCLIDENAME = #{nuclideName}
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
</select>
@ -190,41 +190,54 @@
<!-- RnAuto 获取样品中识别到的核素集合-->
<select id="getRnAutoIdentifiedNuclides" resultType="org.jeecg.entity.NuclideActConcIntvl">
SELECT t1.SAMPLE_ID AS sampleId,
SELECT * FROM (
<!-- P类型数据 -->
SELECT
t1.SAMPLE_ID AS sampleId,
t1.COLLECT_STOP AS collectStop,
t1.SAMPLE_TYPE AS sampleType,
t1.STATION_ID AS stationId,
t1.STATUS AS status,
CASE
WHEN t1.SAMPLE_TYPE = 'P' THEN
t2.NUCLIDENAME
WHEN t1.SAMPLE_TYPE = 'B' THEN
t3.NUCLIDE_NAME
END AS NUCLIDE_NAME,
CASE
WHEN t1.SAMPLE_TYPE = 'P' THEN
TO_NUMBER(REGEXP_REPLACE(t2.CONCENTRATION, '[^0-9.Ee-]', ''))
WHEN t1.SAMPLE_TYPE = 'B' THEN
t3.CONC
END AS conc,
CASE
WHEN t1.SAMPLE_TYPE = 'P' THEN
TO_NUMBER(REGEXP_REPLACE(t2.MDC, '[^0-9.Ee-]', ''))
WHEN t1.SAMPLE_TYPE = 'B' THEN
t3.MDC
END AS mdc
COALESCE(s1.category, 0) AS category,
t2.NUCLIDENAME AS nuclideName,
CAST(REGEXP_REPLACE(t2.CONCENTRATION, '[^0-9.Ee-]', '') AS BINARY_DOUBLE) AS conc,
0 as concErr,
CAST(REGEXP_REPLACE(t2.MDC, '[^0-9.Ee-]', '') AS BINARY_DOUBLE) AS mdc
FROM ORIGINAL.GARDS_SAMPLE_DATA t1
LEFT JOIN RNAUTO.GARDS_NUCL_IDED t2 ON t1.SAMPLE_TYPE = 'P'
AND t1.SAMPLE_ID = t2.SAMPLE_ID
LEFT JOIN RNAUTO.GARDS_XE_RESULTS t3 ON t1.SAMPLE_TYPE = 'B'
AND t1.SAMPLE_ID = t3.SAMPLE_ID
LEFT JOIN RNAUTO.GARDS_ANALYSES s1 ON t1.SAMPLE_ID = s1.SAMPLE_ID
INNER JOIN RNAUTO.GARDS_NUCL_IDED t2 ON t1.SAMPLE_ID = t2.SAMPLE_ID
WHERE t1.STATION_ID = #{station}
AND t1.STATUS != 'F'
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}
, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}
, 'YYYY-MM-DD hh24:mi:ss')
AND t1.COLLECT_STOP &gt;= TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND t1.COLLECT_STOP &lt; TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
AND t1.SAMPLE_TYPE = 'P'
UNION ALL
<!-- B类型数据 -->
SELECT
t1.SAMPLE_ID AS sampleId,
t1.COLLECT_STOP AS collectStop,
t1.SAMPLE_TYPE AS sampleType,
t1.STATION_ID AS stationId,
t1.STATUS AS status,
COALESCE(s1.category, 0) AS category,
t3.NUCLIDE_NAME AS nuclideName,
t3.CONC AS conc,
t3.CONC_ERR as concErr,
t3.MDC AS mdc
FROM ORIGINAL.GARDS_SAMPLE_DATA t1
LEFT JOIN RNAUTO.GARDS_ANALYSES s1 ON t1.SAMPLE_ID = s1.SAMPLE_ID
INNER JOIN RNAUTO.GARDS_XE_RESULTS t3 ON t1.SAMPLE_ID = t3.SAMPLE_ID
WHERE t1.STATION_ID = #{station}
AND t1.STATUS != 'F'
AND t1.COLLECT_STOP &gt;= TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND t1.COLLECT_STOP &lt; TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
AND t1.SAMPLE_TYPE = 'B'
) t
ORDER BY collectStop DESC
</select>
<!-- RnAuto 核素等级时序分析-->
@ -238,8 +251,50 @@
RNAUTO.GARDS_ANALYSES B
ON A.SAMPLE_ID = B.SAMPLE_ID
WHERE A.STATION_ID = #{station}
AND A.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND A.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
</select>
<select id="getNuclideTimeSeriesAnalysis" resultType="org.jeecg.entity.SampleLevelData">
SELECT a.SAMPLE_ID,
a.COLLECT_STOP,
b.CATEGORY,
CAST(REGEXP_REPLACE(c.MDC, '[^0-9.Ee-]', '') AS BINARY_DOUBLE) AS mdc,
CAST(REGEXP_REPLACE(c.CONCENTRATION, '[^0-9.Ee-]', '') AS BINARY_DOUBLE) AS conc,
0 AS concErr,
th1.THRESHOLD_VALUE
FROM ORIGINAL.GARDS_SAMPLE_DATA a
INNER JOIN ${schemaName}.GARDS_ANALYSES b ON a.SAMPLE_ID = b.SAMPLE_ID AND b.CATEGORY > 2
INNER JOIN ${schemaName}.GARDS_NUCL_IDED c
ON a.SAMPLE_ID = c.SAMPLE_ID AND c.NUCLIDENAME = #{nuclideName}
INNER JOIN ${schemaName}.GARDS_THRESHOLD_RESULT_HIS th1
ON a.STATION_ID = th1.STATION_ID
AND a.COLLECT_STOP = th1.COLLECT_STOP
AND th1.NUCLIDENAME = #{nuclideName}
WHERE a.STATION_ID = #{station}
AND a.SAMPLE_TYPE = 'P'
AND a.COLLECT_STOP &gt;= TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND a.COLLECT_STOP &lt; TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
UNION ALL
SELECT a.SAMPLE_ID,
a.COLLECT_STOP,
b.CATEGORY,
c.MDC AS mdc,
c.conc AS conc,
c.CONC_ERR concErr,
th1.THRESHOLD_VALUE
FROM ORIGINAL.GARDS_SAMPLE_DATA a
INNER JOIN ${schemaName}.GARDS_ANALYSES b ON a.SAMPLE_ID = b.SAMPLE_ID
INNER JOIN ${schemaName}.GARDS_XE_RESULTS c
ON a.SAMPLE_ID = c.SAMPLE_ID AND c.NUCLIDE_NAME = #{nuclideName}
INNER JOIN ${schemaName}.GARDS_THRESHOLD_RESULT_HIS th1
ON a.STATION_ID = th1.STATION_ID
AND a.COLLECT_STOP = th1.COLLECT_STOP
AND th1.NUCLIDENAME = #{nuclideName}
WHERE a.STATION_ID = #{station}
AND a.SAMPLE_TYPE = 'B'
AND a.COLLECT_STOP &gt;= TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND a.COLLECT_STOP &lt; TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
</select>
@ -271,9 +326,9 @@
WHERE t1.STATION_ID = #{station}
AND t1.STATUS != 'F'
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}
, 'YYYY-MM-DD hh24:mi:ss')
, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}
, 'YYYY-MM-DD hh24:mi:ss')
, 'YYYY-MM-DD HH24:MI:SS')
</select>
<!-- RnMan 核素等级时序分析-->
<select id="getRnManNuclideTimeSeriesAnalysis" resultType="org.jeecg.entity.SampleLevelData">
@ -285,8 +340,8 @@
RNMAN.GARDS_ANALYSES B
ON A.SAMPLE_ID = B.SAMPLE_ID
WHERE A.STATION_ID = #{station}
AND A.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND A.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
</select>
<select id="selectByStationAndNuclide" resultType="org.jeecg.entity.GardsThresholdResultHis">
@ -515,8 +570,8 @@
LEFT JOIN CONFIGURATION.GARDS_STATIONS c1
ON t1.STATION_ID = c1.STATION_ID
WHERE t1.SAMPLE_TYPE = #{sampleType}
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
ORDER BY t1.COLLECT_STOP ASC
</select>
@ -539,8 +594,8 @@
LEFT JOIN CONFIGURATION.GARDS_STATIONS c1
ON t1.STATION_ID = c1.STATION_ID
WHERE t1.SAMPLE_TYPE = #{sampleType}
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD hh24:mi:ss')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD hh24:mi:ss')
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
ORDER BY t1.COLLECT_STOP ASC
</select>

View File

@ -1,9 +1,13 @@
package org.jeecg.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.fasterxml.jackson.core.type.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.jeecg.common.api.vo.Result;
@ -21,6 +25,7 @@ import org.jeecg.vo.StationInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
@ -221,6 +226,43 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
.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);
if (CollectionUtils.isNotEmpty(thresholdResultHisDataList)) {
// 构建Map: 复合键 -> 阈值
Map<String, GardsThresholdResultHis> thresholdMap = new HashMap<>();
for (GardsThresholdResultHis threshold : thresholdResultHisDataList) {
// 创建复合键: nuclideName|stationId|collectStop
String key = threshold.getNuclideName() + "|" +
(threshold.getStationId() != null ? Integer.valueOf(threshold.getStationId()) : stationCode) + "|" +
safeGetTime(threshold.getCollectStop());
thresholdMap.put(key, threshold);
}
// 设置阈值
for (NuclideActConcIntvl data : nuclideActConcIntvlList) {
if (data.getNuclideName() == null || data.getCollectStop() == null) {
continue;
}
// 创建相同的复合键
String dataKey = data.getNuclideName() + "|" +
(data.getStationCode() != null ? Integer.valueOf(data.getStationCode()) : stationCode) + "|" +
data.getCollectStop().getTime();
GardsThresholdResultHis threshold = thresholdMap.get(dataKey);
if (threshold != null) {
data.setThresholdValue(threshold.getThresholdValue());
}
}
}
}
Map<String, List<NuclideActConcIntvl>> sortedByCount = groupedByNuclideName.entrySet().stream()
.sorted(Map.Entry.<String, List<NuclideActConcIntvl>>comparingByValue(
Comparator.comparingInt(List::size)
@ -233,17 +275,10 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
));
//查询级别 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("nuclideActConcIntvlList", sortedByCount);
resultMap.put("sampleLevelDataList", sampleLevelDataList);
resultMap.put("thresholdResultHisDataList", thresholdResultHisDataList);
//resultMap.put("sampleLevelDataList", sampleLevelDataList);
//resultMap.put("thresholdResultHisDataList", thresholdResultHisDataList);
result.setSuccess(true);
result.setResult(resultMap);
return result;
@ -253,7 +288,10 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
}
}
// 安全获取时间戳
private long safeGetTime(Date date) {
return date != null ? date.getTime() : 0L;
}
/**
* 获取指定时间范围内的样品等级
@ -382,6 +420,13 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
}
// File file=new File("C:\\Users\\cnndc\\Desktop\\数据导出\\无标题.json");
// ObjectMapper objectMapper = new ObjectMapper();
// Double/Integer处理 "3.776103e+03" 3776.103
// objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
// nuclideActConcIntvls= objectMapper.readValue(file, new TypeReference<List<NuclideActConcIntvl>>() {});
//获取浓度出现的次数
//获取浓度值集合
List<Double> data = DistributionAnalysisToolkit.convertConcToDoubleList(nuclideActConcIntvls);
@ -465,44 +510,53 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
//核素的阈值
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;
};
//region
// 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;
// };
//endregion
String schemaName = dataSource == 1 ? "RNAUTO" : "RNMAN";
thresholdResultHisList = this.baseMapper.selectByCondition(schemaName, Arrays.asList(Integer.valueOf(station))
, Arrays.asList(nuclideName), startTime, endTime);
List<SampleLevelData> sampleDatass = this.baseMapper.getNuclideTimeSeriesAnalysis(schemaName,station,nuclideName, startTime, endTime);
// thresholdResultHisList = this.baseMapper.selectByCondition(schemaName, Arrays.asList(Integer.valueOf(station))
// , Arrays.asList(nuclideName), startTime, endTime);
resultMap.put("sampleDataList", sampleDatas);
resultMap.put("nuclideInfoList", nuclideActConcIntvls);
resultMap.put("thresholdResultHisList", thresholdResultHisList);
// resultMap.put("nuclideInfoList", nuclideActConcIntvls);
// resultMap.put("thresholdResultHisList", thresholdResultHisList);
result.setSuccess(true);
result.setResult(resultMap);
return result;
} catch (Exception e) {
result.error500("核素活度浓度时序分析错误:" + e.getMessage());
log.error("核素活度浓度时序分析错误:" + e.getMessage(), e);
result.error500("核素活度浓度时序分析错误" );
return result;
}

View File

@ -23,9 +23,17 @@ public class DistributionAnalysisToolkit {
this.count = nuclideData.size();
for (NuclideActConcIntvl nuclide : nuclideData) {
//获取浓度值
values.add(nuclide.getConc());
//计算获取级别
levelDistribution.merge(nuclide.getCategory(),1,Integer::sum);
Double conc = nuclide.getConc();
if (conc != null) { // 过滤 conc null
values.add(conc);
}
Integer category = nuclide.getCategory();
if (category != null) { // 跳过 null
levelDistribution.merge(category, 1, Integer::sum);
} else {
// 数据库中存在记录 null 级别用特殊 key -1
// levelDistribution.merge(-1, 1, Integer::sum);
}
}
}
}