修改数据分析
This commit is contained in:
parent
c2731e421c
commit
290493fa34
|
|
@ -1,6 +1,8 @@
|
||||||
package org.jeecg.entity;
|
package org.jeecg.entity;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
|
@ -15,4 +17,10 @@ public class GardsThresholdResultHis {
|
||||||
private double percentile75;
|
private double percentile75;
|
||||||
private Date calculationTime;
|
private Date calculationTime;
|
||||||
private Long idAnalysis;
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package org.jeecg.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
|
@ -12,62 +13,78 @@ public class NuclideActConcIntvl {
|
||||||
/** 样品ID
|
/** 样品ID
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("SAMPLEID")
|
||||||
private Integer sampleId;
|
private Integer sampleId;
|
||||||
/**
|
/**
|
||||||
* 级别
|
* 级别
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("CATEGORY")
|
||||||
private Integer 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
|
* 系统类型(P : particulate; B :gas with 3-D β-γ coincidence detection; G :all other gas systems (high-resolution
|
||||||
* γ-spectrometry or 2-D β-γ coincidence
|
* γ-spectrometry or 2-D β-γ coincidence
|
||||||
* detection))
|
* detection))
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("SAMPLE_TYPE")
|
||||||
private String sampleType;
|
private String sampleType;
|
||||||
|
|
||||||
/** 台站ID
|
/** 台站ID
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("STATIONID")
|
||||||
private Integer stationId;
|
private Integer stationId;
|
||||||
/** 台站编码
|
/** 台站编码
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("STATIONCODE")
|
||||||
private String stationCode;
|
private String stationCode;
|
||||||
|
|
||||||
/**数据源
|
/**数据源
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("DATASOURCE")
|
||||||
private Integer dataSource;
|
private Integer dataSource;
|
||||||
|
|
||||||
/** MDC
|
/** MDC
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("MDC")
|
||||||
private Double mdc;
|
private Double mdc;
|
||||||
|
|
||||||
/** 活度浓度
|
/** 活度浓度
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("CONC")
|
||||||
private Double conc;
|
private Double conc;
|
||||||
/** 收集停止时间
|
/** 收集停止时间
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@JsonProperty("COLLECTSTOP")
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
private Date collectStop;
|
private Date collectStop;
|
||||||
/**
|
/**
|
||||||
* 活度值不确定度
|
* 活度值不确定度
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("CONCERR")
|
||||||
private Double concErr;
|
private Double concErr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 样品处理状态
|
* 样品处理状态
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("STATUS")
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 核素名称
|
* 核素名称
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("NUCLIDE_NAME")
|
||||||
private String nuclideName;
|
private String nuclideName;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package org.jeecg.entity;
|
package org.jeecg.entity;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
|
@ -11,14 +13,34 @@ public class SampleLevelData {
|
||||||
* 样品ID
|
* 样品ID
|
||||||
*/
|
*/
|
||||||
private Integer sampleId;
|
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 Date collectStop;
|
||||||
/**
|
/**
|
||||||
* 级别
|
* 级别
|
||||||
*/
|
*/
|
||||||
private Integer category;
|
private Integer category;
|
||||||
|
|
||||||
|
/** 活度浓度
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private Double conc;
|
||||||
|
/**
|
||||||
|
* 活度值不确定度
|
||||||
|
*/
|
||||||
|
private Double concErr;
|
||||||
|
|
||||||
|
/** MDC
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private Double mdc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 阈值
|
||||||
|
*/
|
||||||
|
private Double thresholdValue;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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> 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
|
//endregion
|
||||||
|
|
||||||
//region RNAUTO 获取样品中元素的浓度活度、MDC信息
|
//region RNAUTO 获取样品中元素的浓度活度、MDC信息
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,8 @@
|
||||||
ON t1.SAMPLE_ID = t2.SAMPLE_ID
|
ON t1.SAMPLE_ID = t2.SAMPLE_ID
|
||||||
WHERE t1.STATION_ID = #{station}
|
WHERE t1.STATION_ID = #{station}
|
||||||
AND t1.SAMPLE_TYPE = #{sampleType}
|
AND t1.SAMPLE_TYPE = #{sampleType}
|
||||||
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, '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')
|
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
@ -56,8 +56,8 @@
|
||||||
ON t1.SAMPLE_ID = t2.SAMPLE_ID
|
ON t1.SAMPLE_ID = t2.SAMPLE_ID
|
||||||
WHERE t1.STATION_ID = #{station}
|
WHERE t1.STATION_ID = #{station}
|
||||||
AND t1.SAMPLE_TYPE = #{sampleType}
|
AND t1.SAMPLE_TYPE = #{sampleType}
|
||||||
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, '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')
|
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
@ -73,8 +73,8 @@
|
||||||
RNAUTO.GARDS_ANALYSES b
|
RNAUTO.GARDS_ANALYSES b
|
||||||
WHERE a.SAMPLE_ID = b.SAMPLE_ID
|
WHERE a.SAMPLE_ID = b.SAMPLE_ID
|
||||||
AND a.STATION_ID = #{station}
|
AND a.STATION_ID = #{station}
|
||||||
AND a.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, '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')
|
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getRnManSampleLevel" resultType="org.jeecg.entity.SampleLevelData">
|
<select id="getRnManSampleLevel" resultType="org.jeecg.entity.SampleLevelData">
|
||||||
|
|
@ -85,8 +85,8 @@
|
||||||
RNMAN.GARDS_ANALYSES b
|
RNMAN.GARDS_ANALYSES b
|
||||||
WHERE a.SAMPLE_ID = b.SAMPLE_ID
|
WHERE a.SAMPLE_ID = b.SAMPLE_ID
|
||||||
AND a.STATION_ID = #{station}
|
AND a.STATION_ID = #{station}
|
||||||
AND a.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, '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')
|
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -112,8 +112,8 @@
|
||||||
WHERE a.SAMPLE_TYPE = #{sampleType}
|
WHERE a.SAMPLE_TYPE = #{sampleType}
|
||||||
AND a.STATION_ID = #{station}
|
AND a.STATION_ID = #{station}
|
||||||
AND b.NUCLIDENAME = #{nuclideName}
|
AND b.NUCLIDENAME = #{nuclideName}
|
||||||
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, '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')
|
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 获取样品类型=气体 元素的浓度活度、MDC信息-->
|
<!-- 获取样品类型=气体 元素的浓度活度、MDC信息-->
|
||||||
|
|
@ -134,8 +134,8 @@
|
||||||
WHERE a.SAMPLE_TYPE = '#{sampleType}'
|
WHERE a.SAMPLE_TYPE = '#{sampleType}'
|
||||||
AND a.STATION_ID = #{station}
|
AND a.STATION_ID = #{station}
|
||||||
AND b.NUCLIDENAME = #{nuclideName}
|
AND b.NUCLIDENAME = #{nuclideName}
|
||||||
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, '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')
|
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -158,8 +158,8 @@
|
||||||
WHERE a.SAMPLE_TYPE = '#{sampleType}'
|
WHERE a.SAMPLE_TYPE = '#{sampleType}'
|
||||||
AND a.STATION_ID = #{station}
|
AND a.STATION_ID = #{station}
|
||||||
AND b.NUCLIDENAME = #{nuclideName}
|
AND b.NUCLIDENAME = #{nuclideName}
|
||||||
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, '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')
|
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 获取样品类型=气体 元素的浓度活度、MDC信息-->
|
<!-- 获取样品类型=气体 元素的浓度活度、MDC信息-->
|
||||||
|
|
@ -180,8 +180,8 @@
|
||||||
WHERE a.SAMPLE_TYPE = '#{sampleType}'
|
WHERE a.SAMPLE_TYPE = '#{sampleType}'
|
||||||
AND a.STATION_ID = #{station}
|
AND a.STATION_ID = #{station}
|
||||||
AND b.NUCLIDENAME = #{nuclideName}
|
AND b.NUCLIDENAME = #{nuclideName}
|
||||||
AND a.COLLECT_START BETWEEN TO_DATE(#{startTime}, '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')
|
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -190,41 +190,54 @@
|
||||||
<!-- RnAuto 获取样品中识别到的核素集合-->
|
<!-- RnAuto 获取样品中识别到的核素集合-->
|
||||||
|
|
||||||
<select id="getRnAutoIdentifiedNuclides" resultType="org.jeecg.entity.NuclideActConcIntvl">
|
<select id="getRnAutoIdentifiedNuclides" resultType="org.jeecg.entity.NuclideActConcIntvl">
|
||||||
|
SELECT * FROM (
|
||||||
SELECT t1.SAMPLE_ID AS sampleId,
|
<!-- P类型数据 -->
|
||||||
t1.COLLECT_STOP AS collectStop,
|
SELECT
|
||||||
t1.SAMPLE_TYPE AS sampleType,
|
t1.SAMPLE_ID AS sampleId,
|
||||||
t1.STATION_ID AS stationId,
|
t1.COLLECT_STOP AS collectStop,
|
||||||
t1.STATUS AS status,
|
t1.SAMPLE_TYPE AS sampleType,
|
||||||
CASE
|
t1.STATION_ID AS stationId,
|
||||||
WHEN t1.SAMPLE_TYPE = 'P' THEN
|
t1.STATUS AS status,
|
||||||
t2.NUCLIDENAME
|
COALESCE(s1.category, 0) AS category,
|
||||||
WHEN t1.SAMPLE_TYPE = 'B' THEN
|
t2.NUCLIDENAME AS nuclideName,
|
||||||
t3.NUCLIDE_NAME
|
CAST(REGEXP_REPLACE(t2.CONCENTRATION, '[^0-9.Ee-]', '') AS BINARY_DOUBLE) AS conc,
|
||||||
END AS NUCLIDE_NAME,
|
0 as concErr,
|
||||||
CASE
|
CAST(REGEXP_REPLACE(t2.MDC, '[^0-9.Ee-]', '') AS BINARY_DOUBLE) AS mdc
|
||||||
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
|
|
||||||
FROM ORIGINAL.GARDS_SAMPLE_DATA t1
|
FROM ORIGINAL.GARDS_SAMPLE_DATA t1
|
||||||
LEFT JOIN RNAUTO.GARDS_NUCL_IDED t2 ON t1.SAMPLE_TYPE = 'P'
|
LEFT JOIN RNAUTO.GARDS_ANALYSES s1 ON t1.SAMPLE_ID = s1.SAMPLE_ID
|
||||||
AND t1.SAMPLE_ID = t2.SAMPLE_ID
|
INNER JOIN RNAUTO.GARDS_NUCL_IDED t2 ON 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
|
|
||||||
WHERE t1.STATION_ID = #{station}
|
WHERE t1.STATION_ID = #{station}
|
||||||
AND t1.STATUS != 'F'
|
AND t1.STATUS != 'F'
|
||||||
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}
|
AND t1.COLLECT_STOP >= TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
, 'YYYY-MM-DD hh24:mi:ss')
|
AND t1.COLLECT_STOP < TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
AND TO_DATE(#{endTime}
|
AND t1.SAMPLE_TYPE = 'P'
|
||||||
, 'YYYY-MM-DD hh24:mi:ss')
|
|
||||||
|
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 >= TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
AND t1.COLLECT_STOP < TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
AND t1.SAMPLE_TYPE = 'B'
|
||||||
|
) t
|
||||||
|
ORDER BY collectStop DESC
|
||||||
|
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- RnAuto 核素等级时序分析-->
|
<!-- RnAuto 核素等级时序分析-->
|
||||||
|
|
@ -238,8 +251,50 @@
|
||||||
RNAUTO.GARDS_ANALYSES B
|
RNAUTO.GARDS_ANALYSES B
|
||||||
ON A.SAMPLE_ID = B.SAMPLE_ID
|
ON A.SAMPLE_ID = B.SAMPLE_ID
|
||||||
WHERE A.STATION_ID = #{station}
|
WHERE A.STATION_ID = #{station}
|
||||||
AND A.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, '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')
|
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 >= TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
AND a.COLLECT_STOP < 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 >= TO_DATE(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
AND a.COLLECT_STOP < TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -271,9 +326,9 @@
|
||||||
WHERE t1.STATION_ID = #{station}
|
WHERE t1.STATION_ID = #{station}
|
||||||
AND t1.STATUS != 'F'
|
AND t1.STATUS != 'F'
|
||||||
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}
|
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}
|
||||||
, 'YYYY-MM-DD hh24:mi:ss')
|
, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
AND TO_DATE(#{endTime}
|
AND TO_DATE(#{endTime}
|
||||||
, 'YYYY-MM-DD hh24:mi:ss')
|
, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
</select>
|
</select>
|
||||||
<!-- RnMan 核素等级时序分析-->
|
<!-- RnMan 核素等级时序分析-->
|
||||||
<select id="getRnManNuclideTimeSeriesAnalysis" resultType="org.jeecg.entity.SampleLevelData">
|
<select id="getRnManNuclideTimeSeriesAnalysis" resultType="org.jeecg.entity.SampleLevelData">
|
||||||
|
|
@ -285,8 +340,8 @@
|
||||||
RNMAN.GARDS_ANALYSES B
|
RNMAN.GARDS_ANALYSES B
|
||||||
ON A.SAMPLE_ID = B.SAMPLE_ID
|
ON A.SAMPLE_ID = B.SAMPLE_ID
|
||||||
WHERE A.STATION_ID = #{station}
|
WHERE A.STATION_ID = #{station}
|
||||||
AND A.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, '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')
|
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectByStationAndNuclide" resultType="org.jeecg.entity.GardsThresholdResultHis">
|
<select id="selectByStationAndNuclide" resultType="org.jeecg.entity.GardsThresholdResultHis">
|
||||||
|
|
@ -515,8 +570,8 @@
|
||||||
LEFT JOIN CONFIGURATION.GARDS_STATIONS c1
|
LEFT JOIN CONFIGURATION.GARDS_STATIONS c1
|
||||||
ON t1.STATION_ID = c1.STATION_ID
|
ON t1.STATION_ID = c1.STATION_ID
|
||||||
WHERE t1.SAMPLE_TYPE = #{sampleType}
|
WHERE t1.SAMPLE_TYPE = #{sampleType}
|
||||||
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, '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')
|
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
ORDER BY t1.COLLECT_STOP ASC
|
ORDER BY t1.COLLECT_STOP ASC
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
@ -539,22 +594,22 @@
|
||||||
LEFT JOIN CONFIGURATION.GARDS_STATIONS c1
|
LEFT JOIN CONFIGURATION.GARDS_STATIONS c1
|
||||||
ON t1.STATION_ID = c1.STATION_ID
|
ON t1.STATION_ID = c1.STATION_ID
|
||||||
WHERE t1.SAMPLE_TYPE = #{sampleType}
|
WHERE t1.SAMPLE_TYPE = #{sampleType}
|
||||||
AND t1.COLLECT_STOP BETWEEN TO_DATE(#{startTime}, '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')
|
AND TO_DATE(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')
|
||||||
ORDER BY t1.COLLECT_STOP ASC
|
ORDER BY t1.COLLECT_STOP ASC
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
<select id="findStationListByMenuName" resultType="org.jeecg.entity.GardsStations">
|
<select id="findStationListByMenuName" resultType="org.jeecg.entity.GardsStations">
|
||||||
SELECT * FROM CONFIGURATION.GARDS_STATIONS
|
SELECT * FROM CONFIGURATION.GARDS_STATIONS
|
||||||
<where>
|
<where>
|
||||||
TYPE IN
|
TYPE IN
|
||||||
<if test='systemType == "P"'>
|
<if test='systemType == "P"'>
|
||||||
('Manual', 'CINDER', 'RASA', 'LAB')
|
('Manual', 'CINDER', 'RASA', 'LAB')
|
||||||
</if>
|
</if>
|
||||||
<if test='systemType == "B"'>
|
<if test='systemType == "B"'>
|
||||||
('SAUNA', 'ARIX-4', 'ARIX-2', 'SPALAX')
|
('SAUNA', 'ARIX-4', 'ARIX-2', 'SPALAX')
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
@ -1,9 +1,13 @@
|
||||||
package org.jeecg.service.impl;
|
package org.jeecg.service.impl;
|
||||||
|
|
||||||
import com.baomidou.dynamic.datasource.annotation.DS;
|
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.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 com.fasterxml.jackson.databind.DeserializationFeature;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.jeecg.common.api.vo.Result;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
@ -221,6 +226,43 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
|
||||||
.filter(p -> p.getNuclideName() != null)
|
.filter(p -> p.getNuclideName() != null)
|
||||||
.collect(Collectors.groupingBy(NuclideActConcIntvl::getNuclideName));
|
.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()
|
Map<String, List<NuclideActConcIntvl>> sortedByCount = groupedByNuclideName.entrySet().stream()
|
||||||
.sorted(Map.Entry.<String, List<NuclideActConcIntvl>>comparingByValue(
|
.sorted(Map.Entry.<String, List<NuclideActConcIntvl>>comparingByValue(
|
||||||
Comparator.comparingInt(List::size)
|
Comparator.comparingInt(List::size)
|
||||||
|
|
@ -233,17 +275,10 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
||||||
|
// resultMap.put("nuclideActConcIntvlList", groupedByNuclideName);
|
||||||
//查询级别 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("nuclideActConcIntvlList", sortedByCount);
|
||||||
resultMap.put("sampleLevelDataList", sampleLevelDataList);
|
//resultMap.put("sampleLevelDataList", sampleLevelDataList);
|
||||||
resultMap.put("thresholdResultHisDataList", thresholdResultHisDataList);
|
//resultMap.put("thresholdResultHisDataList", thresholdResultHisDataList);
|
||||||
result.setSuccess(true);
|
result.setSuccess(true);
|
||||||
result.setResult(resultMap);
|
result.setResult(resultMap);
|
||||||
return result;
|
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);
|
List<Double> data = DistributionAnalysisToolkit.convertConcToDoubleList(nuclideActConcIntvls);
|
||||||
|
|
@ -465,44 +510,53 @@ public class SampleStatAnalysisService extends ServiceImpl<GardsSampleStatAnalys
|
||||||
//核素的阈值
|
//核素的阈值
|
||||||
List<GardsThresholdResultHis> thresholdResultHisList = new ArrayList<>();
|
List<GardsThresholdResultHis> thresholdResultHisList = new ArrayList<>();
|
||||||
List<NuclideActConcIntvl> nuclideActConcIntvls = new ArrayList<>();
|
List<NuclideActConcIntvl> nuclideActConcIntvls = new ArrayList<>();
|
||||||
nuclideActConcIntvls = switch (sampleType) {
|
//region
|
||||||
case "P" -> {
|
// nuclideActConcIntvls = switch (sampleType) {
|
||||||
sampleDatas = this.baseMapper.getRnAutoSampleLevel(station, startTime, endTime);
|
// case "P" -> {
|
||||||
yield switch (dataSource) {
|
// sampleDatas = this.baseMapper.getRnAutoSampleLevel(station, startTime, endTime);
|
||||||
//RNAUTO
|
// yield switch (dataSource) {
|
||||||
case 1 ->
|
// //RNAUTO
|
||||||
this.baseMapper.getRnautoPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
// case 1 ->
|
||||||
//RNMAN
|
// this.baseMapper.getRnautoPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
case 2 ->
|
// //RNMAN
|
||||||
this.baseMapper.getRnautoNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
// case 2 ->
|
||||||
default -> nuclideActConcIntvls;
|
// this.baseMapper.getRnautoNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
};
|
// default -> nuclideActConcIntvls;
|
||||||
}
|
// };
|
||||||
case "B" -> {
|
// }
|
||||||
sampleDatas = this.baseMapper.getRnManSampleLevel(station, startTime, endTime);
|
// case "B" -> {
|
||||||
yield switch (dataSource) {
|
// sampleDatas = this.baseMapper.getRnManSampleLevel(station, startTime, endTime);
|
||||||
case 1 ->
|
// yield switch (dataSource) {
|
||||||
this.baseMapper.getRnmanPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
// case 1 ->
|
||||||
case 2 ->
|
// this.baseMapper.getRnmanPNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
this.baseMapper.getRnmanNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
// case 2 ->
|
||||||
default -> nuclideActConcIntvls;
|
// this.baseMapper.getRnmanNuclideActConcIntvl(sampleType, station, nuclideName, startTime, endTime);
|
||||||
};
|
// default -> nuclideActConcIntvls;
|
||||||
}
|
// };
|
||||||
default -> nuclideActConcIntvls;
|
// }
|
||||||
};
|
// default -> nuclideActConcIntvls;
|
||||||
|
// };
|
||||||
|
//endregion
|
||||||
String schemaName = dataSource == 1 ? "RNAUTO" : "RNMAN";
|
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("sampleDataList", sampleDatas);
|
||||||
resultMap.put("nuclideInfoList", nuclideActConcIntvls);
|
// resultMap.put("nuclideInfoList", nuclideActConcIntvls);
|
||||||
resultMap.put("thresholdResultHisList", thresholdResultHisList);
|
// resultMap.put("thresholdResultHisList", thresholdResultHisList);
|
||||||
|
|
||||||
result.setSuccess(true);
|
result.setSuccess(true);
|
||||||
result.setResult(resultMap);
|
result.setResult(resultMap);
|
||||||
return result;
|
return result;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
result.error500("核素活度浓度时序分析错误:" + e.getMessage());
|
log.error("核素活度浓度时序分析错误:" + e.getMessage(), e);
|
||||||
|
result.error500("核素活度浓度时序分析错误" );
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,17 @@ public class DistributionAnalysisToolkit {
|
||||||
this.count = nuclideData.size();
|
this.count = nuclideData.size();
|
||||||
for (NuclideActConcIntvl nuclide : nuclideData) {
|
for (NuclideActConcIntvl nuclide : nuclideData) {
|
||||||
//获取浓度值
|
//获取浓度值
|
||||||
values.add(nuclide.getConc());
|
Double conc = nuclide.getConc();
|
||||||
//计算获取级别
|
if (conc != null) { // 过滤 conc null
|
||||||
levelDistribution.merge(nuclide.getCategory(),1,Integer::sum);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user