Merge remote-tracking branch 'origin/SelfStation' into SelfStation

This commit is contained in:
nieziyan 2024-07-31 18:23:38 +08:00
commit 164e44d086
4 changed files with 800 additions and 15 deletions

View File

@ -325,6 +325,23 @@ public class SelfStationController {
/***************************************** beta ******************************************/
@PostMapping("ReAnalyse")
public Result ReAnalyse(@RequestBody AnalyseData analyseData, HttpServletRequest request) {
return selfStationService.ReAnalyse(analyseData, request);
}
@PostMapping("analyseCurrentSpectrum")
@ApiOperation(value = "解析当前加载文件数据", notes = "解析当前加载文件数据")
public Result analyseCurrentSpectrum(@RequestBody AnalyseBetaInfo analyseBetaInfo, HttpServletRequest request) {
String dbName = analyseBetaInfo.getDbNames().get(0);
Integer sampleId = analyseBetaInfo.getSampleIds().get(0);
String sampleFileName = analyseBetaInfo.getSampleFileNames().get(0);
String gasFileName = analyseBetaInfo.getGasFileNames().get(0);
String detFileName = analyseBetaInfo.getDetFileNames().get(0);
String qcFileName = analyseBetaInfo.getQcFileNames().get(0);
return selfStationService.analyseCurrentSpectrum(dbName, sampleId, sampleFileName, gasFileName, detFileName, qcFileName, request);
}
@PostMapping("fitting")
@ApiOperation(value = "公式计算新的曲线", notes = "公式计算新的曲线")
public Result fitting(@RequestBody FittingBody fittingBody, HttpServletRequest request) {

View File

@ -50,6 +50,8 @@ public class SelfStationData implements Serializable {
*/
private SelfStationVueData detVueData;
private BetaDataFile betaDataFile;
private List<List<Double>> gammaNewEnergyListNow;
private List<List<Double>> betaNewEnergyListNow;

View File

@ -106,6 +106,12 @@ public interface ISelfStationService {
Result acceptBaseLine(BaseLineCtrls baseLineCtrls, HttpServletRequest request);
Result ReAnalyse(AnalyseData analyseData, HttpServletRequest request);
Result analyseCurrentSpectrum(String dbName, Integer sampleId, String sampleFileName, String gasFileName, String detFileName, String qcFileName, HttpServletRequest request);
Result analyseAllSpectrum(List<String> dbNames, List<Integer> sampleIds, List<String> sampleFileNames, List<String> gasFileNames, List<String> detFileNames, List<String> qcFileNames, String currentFileName, HttpServletRequest request);
Result fitting(Double paramA, Double paramB, Double paramC, List<SeriseData> tempPointsArray, Integer count,
String sampleFileName, String tabName, boolean fittingBtn, HttpServletRequest request);

View File

@ -1,11 +1,7 @@
package org.jeecg.modules.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
@ -17,10 +13,8 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.cache.Cache;
import org.apache.commons.io.FileUtils;
import org.apache.commons.math3.fitting.GaussianCurveFitter;
import org.apache.commons.math3.fitting.WeightedObservedPoints;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.cache.LocalCache;
import org.jeecg.common.cache.SelfCache;
import org.jeecg.common.constant.StringConstant;
import org.jeecg.common.properties.ParameterProperties;
@ -33,12 +27,11 @@ import org.jeecg.modules.base.entity.configuration.GardsNuclLinesLib;
import org.jeecg.modules.base.entity.original.GardsSampleData;
import org.jeecg.modules.base.entity.rnman.GardsAnalySetting;
import org.jeecg.modules.entity.GardsSampleDataSpectrum;
import org.jeecg.modules.entity.GardsXeResultsSpectrum;
import org.jeecg.modules.entity.vo.*;
import org.jeecg.modules.mapper.SpectrumAnalysisMapper;
import org.jeecg.modules.native_jni.CalValuesHandler;
import org.jeecg.modules.native_jni.EnergySpectrumHandler;
import org.jeecg.modules.native_jni.struct.BgBoundary;
import org.jeecg.modules.native_jni.struct.CalcBgBoundaryParam;
import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct;
import org.jeecg.modules.service.*;
import org.springframework.beans.BeanUtils;
@ -47,22 +40,15 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.*;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@ -74,6 +60,8 @@ public class SelfStationServiceImpl implements ISelfStationService {
@Autowired
private GammaFileUtil gammaFileUtil;
@Autowired
private PHDFileUtil phdFileUtil;
@Autowired
private ParameterProperties parameterProperties;
@Autowired
private FTPUtil ftpUtil;
@ -3378,6 +3366,778 @@ public class SelfStationServiceImpl implements ISelfStationService {
return result;
}
@Override
public Result ReAnalyse(AnalyseData analyseData, HttpServletRequest request) {
Result result = new Result();
//声明接收当前分析后的返回结果的map
Map<String, Object> map = new HashMap<>();
//获取当前登陆的用户名
String userName = JwtUtil.getUserNameByToken(request);
//获取当前操作的文件名称
String currentFileName = analyseData.getCurrentFileName();
//获取自建台站缓存信息
Cache<String, SelfStationData> selfCache = selfStationCache.getSelfCache();
SelfStationData selfStationData = selfCache.getIfPresent(currentFileName + "-" + userName);
//获取缓存信息
// Cache<String, BetaDataFile> cache = betaCache.getBetaCache();
if ("CurrentSpectrum".equals(analyseData.getApplyType())) {
BetaDataFile betaDataFile = selfStationData.getBetaDataFile();
// BetaDataFile betaDataFile = cache.getIfPresent(currentFileName + "-" + userName);
if (Objects.isNull(betaDataFile)) {
result.error500("Load basic file information first!");
return result;
}
map = BetaGammaAnalyzeCurrentProcess(analyseData, betaDataFile);
result.setSuccess(true);
result.setResult(map);
} else if ("AllSpectrum".equals(analyseData.getApplyType())) {
//获取当前选中的文件名称
map = BetaGammaAnalyzeAllProcess(analyseData, userName, currentFileName);
result.setSuccess(true);
result.setResult(map);
}
return result;
}
private Map<String, Object> BetaGammaAnalyzeCurrentProcess(AnalyseData analyseData, BetaDataFile betaDataFile) {
//声明一个map 缓存xeData计算后的结果
Map<String, Object> xeMap = new HashMap<>();
try {
//存储重新分析字段的实体类
SpectrumGroup spectrum_group = new SpectrumGroup();
//获取计算参数
List<SeriseData> betaList = new LinkedList<>();
List<String> betaFittingPara = new LinkedList<>();
List<String> betaFittingParaToUi = new LinkedList<>();
List<SeriseData> gammaList = new LinkedList<>();
List<String> gammaFittingPara = new LinkedList<>();
List<String> gammaFittingParaToUi = new LinkedList<>();
//判断是否对beta页面进行过分析
if (analyseData.isBetaEnergyValid()) {
//如果进行过分析 则将当前beta用于分析的新的数据 赋值到最终使用的数组
if (Objects.nonNull(betaDataFile)) {
//重新分析时将当前的数组封装给到最终记录结果的数组中
betaDataFile.setBetaList(betaDataFile.getBetaListNow());
betaDataFile.setBetaFittingPara(betaDataFile.getBetaFittingParaNow());
betaDataFile.setBetaFittingParaToUi(betaDataFile.getBetaFittingParaToUiNow());
betaDataFile.setBetaNewEnergyList(betaDataFile.getBetaNewEnergyListNow());
//将新的数组封装到各自的数组中
betaList = betaDataFile.getBetaList();
betaFittingPara = betaDataFile.getBetaFittingPara();
betaFittingParaToUi = betaDataFile.getBetaFittingParaToUi();
}
//封装重新计算的数据
List<Double> beCal = new LinkedList<>();
beCal.add(Double.valueOf(betaFittingParaToUi.get(0)));
beCal.add(Double.valueOf(betaFittingParaToUi.get(1)));
beCal.add(Double.valueOf(betaFittingParaToUi.get(2)));
spectrum_group.BgCalPara.b_e_cal = beCal;
List<Double> bc2e = new LinkedList<>();
bc2e.add(Double.valueOf(betaFittingPara.get(0)));
bc2e.add(Double.valueOf(betaFittingPara.get(1)));
bc2e.add(Double.valueOf(betaFittingPara.get(2)));
spectrum_group.b_c2e = bc2e;
if (analyseData.isSampleData()) {
betaDataFile.setBBetaEnergyValidSample(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getBetaNewEnergyList())) {
betaDataFile.setSampleBetaEnergyList(betaDataFile.getBetaNewEnergyList());
xeMap.put("sampleBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
if (analyseData.isGasBgData()) {
betaDataFile.setBBetaEnergyValidGas(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getBetaNewEnergyList())) {
betaDataFile.setGasBetaEnergyList(betaDataFile.getBetaNewEnergyList());
xeMap.put("gasBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
if (analyseData.isDetBgData()) {
betaDataFile.setBBetaEnergyValidDet(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getBetaNewEnergyList())) {
betaDataFile.setDetBetaEnergyList(betaDataFile.getBetaNewEnergyList());
xeMap.put("detBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
if (analyseData.isQcData()) {
if (CollectionUtils.isNotEmpty(betaDataFile.getBetaNewEnergyList())) {
betaDataFile.setQcBetaEnergyList(betaDataFile.getBetaNewEnergyList());
xeMap.put("qcBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
}
//判断是否对gamma页面进行过分析
if (analyseData.isGammaEnergyValid()) {
//如果缓存数据不为空 且对gamma进行了计算 将当前gamma的计算结果赋值到最终的结果数组 进行新的分析使用
if (Objects.nonNull(betaDataFile)) {
betaDataFile.setGammaList(betaDataFile.getGammaListNow());
betaDataFile.setGammaFittingPara(betaDataFile.getGammaFittingParaNow());
betaDataFile.setGammaFittingParaToUi(betaDataFile.getGammaFittingParaToUiNow());
betaDataFile.setGammaNewEnergyList(betaDataFile.getGammaNewEnergyListNow());
gammaList = betaDataFile.getGammaList();
gammaFittingPara = betaDataFile.getGammaFittingPara();
gammaFittingParaToUi = betaDataFile.getGammaFittingParaToUi();
}
List<Double> geCal = new LinkedList<>();
geCal.add(Double.valueOf(gammaFittingParaToUi.get(0)));
geCal.add(Double.valueOf(gammaFittingParaToUi.get(1)));
geCal.add(Double.valueOf(gammaFittingParaToUi.get(2)));
spectrum_group.BgCalPara.g_e_cal = geCal;
List<Double> gc2e = new LinkedList<>();
gc2e.add(Double.valueOf(gammaFittingPara.get(0)));
gc2e.add(Double.valueOf(gammaFittingPara.get(1)));
gc2e.add(Double.valueOf(gammaFittingPara.get(2)));
spectrum_group.g_c2e = gc2e;
if (analyseData.isSampleData()) {
betaDataFile.setBGammaEnergyValidSample(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getGammaNewEnergyList())) {
betaDataFile.setSampleGammaEnergyList(betaDataFile.getGammaNewEnergyList());
xeMap.put("sampleGammaEnergyData", betaDataFile.getGammaNewEnergyList());
}
}
if (analyseData.isGasBgData()) {
betaDataFile.setBGammaEnergyValidGas(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getGammaNewEnergyList())) {
betaDataFile.setGasGammaEnergyList(betaDataFile.getGammaNewEnergyList());
xeMap.put("gasGammaEnergyData", betaDataFile.getGammaNewEnergyList());
}
}
if (analyseData.isDetBgData()) {
betaDataFile.setBGammaEnergyValidDet(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getGammaNewEnergyList())) {
betaDataFile.setDetGammaEnergyList(betaDataFile.getGammaNewEnergyList());
xeMap.put("detGammaEnergyData", betaDataFile.getGammaNewEnergyList());
}
}
if (analyseData.isQcData()) {
if (CollectionUtils.isNotEmpty(betaDataFile.getGammaNewEnergyList())) {
betaDataFile.setQcGammaEnergyList(betaDataFile.getGammaNewEnergyList());
xeMap.put("qcGammaEnergyData", betaDataFile.getGammaNewEnergyList());
}
}
}
//判断是否勾选了sample
spectrum_group.BgCalPara.bApplyNewCalicSample = analyseData.isSampleData();
//判断是否勾选了gas
spectrum_group.BgCalPara.bApplyNewCalicGasBg = analyseData.isGasBgData();
//判断是否勾选了det
spectrum_group.BgCalPara.bApplyNewCalicDetBg = analyseData.isDetBgData();
//判断是否勾选了qc
spectrum_group.BgCalPara.bApplyNewCalicQc = analyseData.isQcData();
File sampleTmp = null;
File gasTmp = null;
File detTmp = null;
if (StringUtils.isNotBlank(betaDataFile.getSampleTmpPath())) {
sampleTmp = new File(betaDataFile.getSampleTmpPath());
}
if (StringUtils.isNotBlank(betaDataFile.getGasTmpPath())) {
gasTmp = new File(betaDataFile.getGasTmpPath());
}
if (StringUtils.isNotBlank(betaDataFile.getDetTmpPath())) {
detTmp = new File(betaDataFile.getDetTmpPath());
}
if (Objects.nonNull(sampleTmp) && Objects.nonNull(gasTmp) && Objects.nonNull(detTmp)) {
//调用分析方法进行分析操作
boolean bRet = phdFileUtil.analyzeSpectrum(sampleTmp, gasTmp, detTmp, spectrum_group.BgCalPara, xeMap, betaDataFile);
if (analyseData.isQcData()) {
if (StringUtils.isNotBlank(betaDataFile.getQcFilePathName())) {
EnergySpectrumStruct struct = betaDataFile.getQcStruct();
if (Objects.nonNull(struct)) {
phdFileUtil.CalQCBoundary(betaList, gammaList, betaFittingParaToUi, gammaFittingParaToUi, struct, xeMap, betaDataFile);
}
}
}
if (bRet) {
List<Boundary> sampleBoundary = (List<Boundary>) xeMap.get("SampleBoundary");
if(CollectionUtils.isNotEmpty(sampleBoundary)) {
betaDataFile.setSampleBoundary(sampleBoundary);
}
List<Boundary> gasBoundary = (List<Boundary>) xeMap.get("GasBoundary");
if(CollectionUtils.isNotEmpty(gasBoundary)) {
betaDataFile.setGasBoundary(gasBoundary);
}
List<Boundary> detBoundary = (List<Boundary>) xeMap.get("DetBoundary");
if(CollectionUtils.isNotEmpty(detBoundary)) {
betaDataFile.setDetBoundary(detBoundary);
}
List<Boundary> qcBoundary = (List<Boundary>) xeMap.get("QCBoundary");
if(CollectionUtils.isNotEmpty(qcBoundary)) {
betaDataFile.setQcBoundary(qcBoundary);
}
List<GardsXeResultsSpectrum> xeResultsSpectrumList = (List<GardsXeResultsSpectrum>) xeMap.get("XeData");
if (CollectionUtils.isNotEmpty(xeResultsSpectrumList)){
for (GardsXeResultsSpectrum xeData: xeResultsSpectrumList) {
Double conc = xeData.getConc();
Double mdc = xeData.getMdc();
if (conc < 0){
xeData.setColor("red");
xeData.setNidFlag(0);
} else if (0<conc && conc < mdc) {
xeData.setColor("#ffcc30");
xeData.setNidFlag(0);
} else if (conc > mdc) {
xeData.setColor("green");
xeData.setNidFlag(1);
}
xeData.setMdc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getMdc()))));
xeData.setConc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConc()))));
xeData.setConcErr(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConcErr()))));
}
betaDataFile.setXeResultsSpectrumList(xeResultsSpectrumList);
betaDataFile.setBProcessed(true);
betaDataFile.setSaveAnalysisResult(true);
betaDataFile.setBgPara(spectrum_group.BgCalPara);
}
xeMap.put("bProcessed", true);
xeMap.put("savedAnalysisResult", true);
} else {
List<Boundary> sampleBoundary = (List<Boundary>) xeMap.get("SampleBoundary");
if(CollectionUtils.isNotEmpty(sampleBoundary)) {
betaDataFile.setSampleBoundary(sampleBoundary);
}
List<Boundary> gasBoundary = (List<Boundary>) xeMap.get("GasBoundary");
if(CollectionUtils.isNotEmpty(gasBoundary)) {
betaDataFile.setGasBoundary(gasBoundary);
}
List<Boundary> detBoundary = (List<Boundary>) xeMap.get("DetBoundary");
if(CollectionUtils.isNotEmpty(detBoundary)) {
betaDataFile.setDetBoundary(detBoundary);
}
List<Boundary> qcBoundary = (List<Boundary>) xeMap.get("QCBoundary");
if(CollectionUtils.isNotEmpty(qcBoundary)) {
betaDataFile.setQcBoundary(qcBoundary);
}
betaDataFile.setBProcessed(false);
betaDataFile.setSaveAnalysisResult(false);
betaDataFile.setXeResultsSpectrumList(Collections.EMPTY_LIST);
xeMap.put("XeData", Collections.EMPTY_LIST);
xeMap.put("bProcessed", false);
xeMap.put("savedAnalysisResult", false);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return xeMap;
}
private Map<String, Object> BetaGammaAnalyzeAllProcess(AnalyseData analyseData, String userName, String currentFileName){
//获取自建台站缓存信息
Cache<String, SelfStationData> selfCache = selfStationCache.getSelfCache();
SelfStationData selfStationData = selfCache.getIfPresent(currentFileName + "-" + userName);
//从本地缓存获取beta gamma的数组
// Cache<String, BetaDataFile> cache = betaCache.getBetaCache();
//返回最终结果用的map
Map<String, Map<String, Object>> analyseResultMap = new HashMap<>();
try {
//需要操作的数据集合
for (String sampleFileName: analyseData.getSampleFileNames()){
//使用当前文件名称获取用于获取计算的参数内容
// BetaDataFile betaDataFile = cache.getIfPresent(currentFileName + "-" + userName);
BetaDataFile betaDataFile = selfStationData.getBetaDataFile();
//获取缓存的计算结果
List<SeriseData> betaList = new LinkedList<>();
List<String> betaFittingPara = new LinkedList<>();
List<String> betaFittingParaToUi = new LinkedList<>();
List<List<Double>> betaNewEnergyListNow = new LinkedList<>();
List<SeriseData> gammaList = new LinkedList<>();
List<String> gammaFittingPara = new LinkedList<>();
List<String> gammaFittingParaToUi = new LinkedList<>();
List<List<Double>> gammaNewEnergyListNow = new LinkedList<>();
//根据sample文件名称获取当前文件的缓存信息
// BetaDataFile sampleBetaData = cache.getIfPresent(sampleFileName + "-" + userName);
SelfStationData selfStationData1 = selfCache.getIfPresent(currentFileName + "-" + userName);
BetaDataFile sampleBetaData = selfStationData1.getBetaDataFile();
//存储重新分析字段的实体类
SpectrumGroup spectrum_group = new SpectrumGroup();
//声明一个map 缓存xeData计算后的结果
Map<String, Object> xeMap = new HashMap<>();
//判断beta是否进行过分析
if (analyseData.isBetaEnergyValid()) {
//判断缓存数据是否为空
if (Objects.nonNull(betaDataFile) && Objects.nonNull(sampleBetaData)) {
//重新分析时将当前的数组封装给到最终记录结果的数组中
betaDataFile.setBetaList(betaDataFile.getBetaListNow());
betaDataFile.setBetaFittingPara(betaDataFile.getBetaFittingParaNow());
betaDataFile.setBetaFittingParaToUi(betaDataFile.getBetaFittingParaToUiNow());
betaDataFile.setBetaNewEnergyList(betaDataFile.getBetaNewEnergyListNow());
//将新的数组封装到各自的数组中
betaList = betaDataFile.getBetaList();
betaFittingPara = betaDataFile.getBetaFittingPara();
betaFittingParaToUi = betaDataFile.getBetaFittingParaToUi();
betaNewEnergyListNow = betaDataFile.getBetaNewEnergyListNow();
//将当前文件用到的计算数据同步到需要计算的文件缓存
sampleBetaData.setBetaList(betaList);
sampleBetaData.setBetaFittingPara(betaFittingPara);
sampleBetaData.setBetaFittingParaToUi(betaFittingParaToUi);
sampleBetaData.setBetaNewEnergyList(betaNewEnergyListNow);
}
List<Double> beCal = new LinkedList<>();
beCal.add(Double.valueOf(betaFittingParaToUi.get(0)));
beCal.add(Double.valueOf(betaFittingParaToUi.get(1)));
beCal.add(Double.valueOf(betaFittingParaToUi.get(2)));
spectrum_group.BgCalPara.b_e_cal = beCal;
List<Double> bc2e = new LinkedList<>();
bc2e.add(Double.valueOf(betaFittingPara.get(0)));
bc2e.add(Double.valueOf(betaFittingPara.get(1)));
bc2e.add(Double.valueOf(betaFittingPara.get(2)));
spectrum_group.b_c2e = bc2e;
if (analyseData.isSampleData()) {
sampleBetaData.setBBetaEnergyValidSample(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getBetaNewEnergyList())) {
sampleBetaData.setSampleBetaEnergyList(betaDataFile.getBetaNewEnergyList());
xeMap.put("sampleBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
if (analyseData.isGasBgData()) {
sampleBetaData.setBBetaEnergyValidGas(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getBetaNewEnergyList())) {
sampleBetaData.setGasBetaEnergyList(betaDataFile.getBetaNewEnergyList());
xeMap.put("gasBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
if (analyseData.isDetBgData()) {
sampleBetaData.setBBetaEnergyValidDet(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getBetaNewEnergyList())) {
sampleBetaData.setDetBetaEnergyList(betaDataFile.getBetaNewEnergyList());
xeMap.put("detBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
if (analyseData.isQcData()) {
if (CollectionUtils.isNotEmpty(betaDataFile.getBetaNewEnergyList())) {
sampleBetaData.setQcBetaEnergyList(betaDataFile.getBetaNewEnergyList());
xeMap.put("qcBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
}
//判断gamma是否进行了计算
if (analyseData.isGammaEnergyValid()) {
//判断缓存数据是否为空
if (Objects.nonNull(betaDataFile) && Objects.nonNull(sampleBetaData)) {
//重新分析时将当前的数组封装给到最终记录结果的数组中
betaDataFile.setGammaList(betaDataFile.getGammaListNow());
betaDataFile.setGammaFittingPara(betaDataFile.getGammaFittingParaNow());
betaDataFile.setGammaFittingParaToUi(betaDataFile.getGammaFittingParaToUiNow());
betaDataFile.setGammaNewEnergyList(betaDataFile.getGammaNewEnergyListNow());
//将新的数组封装到各自的数组中
gammaList = betaDataFile.getGammaList();
gammaFittingPara = betaDataFile.getGammaFittingPara();
gammaFittingParaToUi = betaDataFile.getGammaFittingParaToUi();
gammaNewEnergyListNow = betaDataFile.getGammaNewEnergyListNow();
//将当前文件用到的计算数据同步到需要计算的文件缓存
sampleBetaData.setGammaList(gammaList);
sampleBetaData.setGammaFittingPara(gammaFittingPara);
sampleBetaData.setGammaFittingParaToUi(gammaFittingParaToUi);
sampleBetaData.setGammaNewEnergyList(gammaNewEnergyListNow);
}
List<Double> geCal = new LinkedList<>();
geCal.add(Double.valueOf(gammaFittingParaToUi.get(0)));
geCal.add(Double.valueOf(gammaFittingParaToUi.get(1)));
geCal.add(Double.valueOf(gammaFittingParaToUi.get(2)));
spectrum_group.BgCalPara.g_e_cal = geCal;
List<Double> gc2e = new LinkedList<>();
gc2e.add(Double.valueOf(gammaFittingPara.get(0)));
gc2e.add(Double.valueOf(gammaFittingPara.get(1)));
gc2e.add(Double.valueOf(gammaFittingPara.get(2)));
spectrum_group.g_c2e = gc2e;
if (analyseData.isSampleData()) {
sampleBetaData.setBGammaEnergyValidSample(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getGammaNewEnergyList())) {
sampleBetaData.setSampleGammaEnergyList(betaDataFile.getGammaNewEnergyList());
xeMap.put("sampleGammaEnergyData", betaDataFile.getGammaNewEnergyList());
}
}
if (analyseData.isGasBgData()) {
sampleBetaData.setBGammaEnergyValidGas(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getGammaNewEnergyList())) {
sampleBetaData.setGasGammaEnergyList(betaDataFile.getGammaNewEnergyList());
xeMap.put("gasGammaEnergyData", betaDataFile.getGammaNewEnergyList());
}
}
if (analyseData.isDetBgData()) {
sampleBetaData.setBGammaEnergyValidDet(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getGammaNewEnergyList())) {
sampleBetaData.setDetGammaEnergyList(betaDataFile.getGammaNewEnergyList());
xeMap.put("detGammaEnergyData", betaDataFile.getGammaNewEnergyList());
}
}
if (analyseData.isQcData()) {
if (CollectionUtils.isNotEmpty(betaDataFile.getGammaNewEnergyList())) {
sampleBetaData.setQcGammaEnergyList(betaDataFile.getGammaNewEnergyList());
xeMap.put("qcGammaEnergyData", betaDataFile.getGammaNewEnergyList());
}
}
}
spectrum_group.BgCalPara.bApplyNewCalicSample = analyseData.isSampleData();
spectrum_group.BgCalPara.bApplyNewCalicGasBg = analyseData.isGasBgData();
spectrum_group.BgCalPara.bApplyNewCalicDetBg = analyseData.isDetBgData();
spectrum_group.BgCalPara.bApplyNewCalicQc = analyseData.isQcData();
File sampleTmp = null;
File gasTmp = null;
File detTmp = null;
if (StringUtils.isNotBlank(sampleBetaData.getSampleTmpPath())) {
sampleTmp = new File(sampleBetaData.getSampleTmpPath());
}
if (StringUtils.isNotBlank(sampleBetaData.getGasTmpPath())) {
gasTmp = new File(sampleBetaData.getGasTmpPath());
}
if (StringUtils.isNotBlank(sampleBetaData.getDetTmpPath())) {
detTmp = new File(sampleBetaData.getDetTmpPath());
}
if (Objects.nonNull(sampleTmp) && Objects.nonNull(gasTmp) && Objects.nonNull(detTmp)) {
//调用分析方法进行分析操作
boolean bRet = phdFileUtil.analyzeSpectrum(sampleTmp, gasTmp, detTmp, spectrum_group.BgCalPara, xeMap, sampleBetaData);
if (analyseData.isQcData()) {
if (StringUtils.isNotBlank(sampleBetaData.getQcFilePathName())) {
EnergySpectrumStruct struct = sampleBetaData.getQcStruct();
if (Objects.nonNull(struct)) {
phdFileUtil.CalQCBoundary(betaList, gammaList, betaFittingParaToUi, gammaFittingParaToUi, struct, xeMap, sampleBetaData);
}
}
}
if (bRet) {
List<Boundary> sampleBoundary = (List<Boundary>) xeMap.get("SampleBoundary");
if(CollectionUtils.isNotEmpty(sampleBoundary)) {
sampleBetaData.setSampleBoundary(sampleBoundary);
}
List<Boundary> gasBoundary = (List<Boundary>) xeMap.get("GasBoundary");
if(CollectionUtils.isNotEmpty(gasBoundary)) {
sampleBetaData.setGasBoundary(gasBoundary);
}
List<Boundary> detBoundary = (List<Boundary>) xeMap.get("DetBoundary");
if(CollectionUtils.isNotEmpty(detBoundary)) {
sampleBetaData.setDetBoundary(detBoundary);
}
List<Boundary> qcBoundary = (List<Boundary>) xeMap.get("QCBoundary");
if(CollectionUtils.isNotEmpty(qcBoundary)) {
sampleBetaData.setQcBoundary(qcBoundary);
}
List<GardsXeResultsSpectrum> xeResultsSpectrumList = (List<GardsXeResultsSpectrum>) xeMap.get("XeData");
if (CollectionUtils.isNotEmpty(xeResultsSpectrumList)){
for (GardsXeResultsSpectrum xeData:xeResultsSpectrumList) {
Double conc = xeData.getConc();
Double mdc = xeData.getMdc();
if (conc < 0){
xeData.setColor("red");
xeData.setNidFlag(0);
} else if (0<conc && conc < mdc) {
xeData.setColor("#ffcc30");
xeData.setNidFlag(0);
} else if (conc > mdc) {
xeData.setColor("green");
xeData.setNidFlag(1);
}
xeData.setMdc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getMdc()))));
xeData.setConc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConc()))));
xeData.setConcErr(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConcErr()))));
}
sampleBetaData.setXeResultsSpectrumList(xeResultsSpectrumList);
sampleBetaData.setBProcessed(true);
sampleBetaData.setSaveAnalysisResult(true);
sampleBetaData.setBgPara(spectrum_group.BgCalPara);
}
xeMap.put("bProcessed", true);
xeMap.put("savedAnalysisResult", true);
analyseResultMap.put(sampleFileName, xeMap);
} else {
List<Boundary> sampleBoundary = (List<Boundary>) xeMap.get("SampleBoundary");
if(CollectionUtils.isNotEmpty(sampleBoundary)) {
sampleBetaData.setSampleBoundary(sampleBoundary);
}
List<Boundary> gasBoundary = (List<Boundary>) xeMap.get("GasBoundary");
if(CollectionUtils.isNotEmpty(gasBoundary)) {
sampleBetaData.setGasBoundary(gasBoundary);
}
List<Boundary> detBoundary = (List<Boundary>) xeMap.get("DetBoundary");
if(CollectionUtils.isNotEmpty(detBoundary)) {
sampleBetaData.setDetBoundary(detBoundary);
}
List<Boundary> qcBoundary = (List<Boundary>) xeMap.get("QCBoundary");
if(CollectionUtils.isNotEmpty(qcBoundary)) {
sampleBetaData.setQcBoundary(qcBoundary);
}
sampleBetaData.setBProcessed(false);
sampleBetaData.setSaveAnalysisResult(false);
sampleBetaData.setXeResultsSpectrumList(Collections.EMPTY_LIST);
xeMap.put("XeData", Collections.EMPTY_LIST);
xeMap.put("bProcessed", false);
xeMap.put("savedAnalysisResult", false);
analyseResultMap.put(sampleFileName, xeMap);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return analyseResultMap.get(currentFileName);
}
@Override
public Result analyseCurrentSpectrum(String dbName, Integer sampleId, String sampleFileName, String gasFileName, String detFileName, String qcFileName, HttpServletRequest request) {
Result result = new Result();
//获取用户名
String userName = JwtUtil.getUserNameByToken(request);
//获取自建台站缓存信息
Cache<String, SelfStationData> selfCache = selfStationCache.getSelfCache();
SelfStationData selfStationData = selfCache.getIfPresent(sampleFileName + "-" + userName);
BetaDataFile betaDataFile = selfStationData.getBetaDataFile();
//根据sample文件名称-用户名获取缓存信息
// Cache<String, BetaDataFile> cache = betaCache.getBetaCache();
// BetaDataFile betaDataFile = cache.getIfPresent(sampleFileName + "-" + userName);
if (Objects.isNull(betaDataFile)) {
result.error500("Load basic file information first!");
return result;
}
Map<String, Object> map = new HashMap<>();
BgCalibratePara BgCalPara = null;
try {
//根据文件路径 文件名称获取对应的临时文件
File sampleTmp = null;
File gasTmp = null;
File detTmp = null;
if (StringUtils.isNotBlank(betaDataFile.getSampleTmpPath())) {
sampleTmp = new File(betaDataFile.getSampleTmpPath());
}
if (StringUtils.isNotBlank(betaDataFile.getGasTmpPath())) {
gasTmp = new File(betaDataFile.getGasTmpPath());
}
if (StringUtils.isNotBlank(betaDataFile.getDetTmpPath())) {
detTmp = new File(betaDataFile.getDetTmpPath());
}
if (Objects.isNull(sampleTmp) || Objects.isNull(gasTmp) || Objects.isNull(detTmp)) {
result.error500("Failed to obtain the ftp file. Procedure");
return result;
}
//获取计算后的数据
List<SeriseData> betaList = new LinkedList<>();
List<String> betaFittingParaToUi = new LinkedList<>();
List<SeriseData> gammaList = new LinkedList<>();
List<String> gammaFittingParaToUi = new LinkedList<>();
if (Objects.nonNull(betaDataFile)) {
betaList = betaDataFile.getBetaList();
betaFittingParaToUi = betaDataFile.getBetaFittingParaToUi();
gammaList = betaDataFile.getGammaList();
gammaFittingParaToUi = betaDataFile.getGammaFittingParaToUi();
BgCalPara = betaDataFile.getBgPara();
}
//调用分析方法
boolean bRet = phdFileUtil.analyzeSpectrum(sampleTmp, gasTmp, detTmp, BgCalPara, map, betaDataFile);
if (bRet) {
//分析qc文件信息并重新计算qc边界值
if (StringUtils.isNotBlank(betaDataFile.getQcFilePathName())) {
EnergySpectrumStruct struct = betaDataFile.getQcStruct();
if (Objects.nonNull(struct)) {
phdFileUtil.CalQCBoundary(betaList, gammaList, betaFittingParaToUi, gammaFittingParaToUi, struct, map, betaDataFile);
}
}
List<Boundary> sampleBoundary = (List<Boundary>) map.get("SampleBoundary");
if(CollectionUtils.isNotEmpty(sampleBoundary)) {
betaDataFile.setSampleBoundary(sampleBoundary);
}
List<Boundary> gasBoundary = (List<Boundary>) map.get("GasBoundary");
if(CollectionUtils.isNotEmpty(gasBoundary)) {
betaDataFile.setGasBoundary(gasBoundary);
}
List<Boundary> detBoundary = (List<Boundary>) map.get("DetBoundary");
if(CollectionUtils.isNotEmpty(detBoundary)) {
betaDataFile.setDetBoundary(detBoundary);
}
List<Boundary> qcBoundary = (List<Boundary>) map.get("QCBoundary");
if(CollectionUtils.isNotEmpty(qcBoundary)) {
betaDataFile.setQcBoundary(qcBoundary);
}
if (CollectionUtils.isNotEmpty(map)) {
List<GardsXeResultsSpectrum> xeDataList = (List<GardsXeResultsSpectrum>) map.get("XeData");
if (CollectionUtils.isNotEmpty(xeDataList)){
for (GardsXeResultsSpectrum xeData:xeDataList) {
Double conc = xeData.getConc();
Double mdc = xeData.getMdc();
if (conc < 0){
xeData.setColor("red");
xeData.setNidFlag(0);
} else if (0<conc && conc < mdc) {
xeData.setColor("#ffcc30");
xeData.setNidFlag(0);
} else if (conc > mdc) {
xeData.setColor("green");
xeData.setNidFlag(1);
}
xeData.setMdc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getMdc()))));
xeData.setConc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConc()))));
xeData.setConcErr(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConcErr()))));
}
betaDataFile.setXeResultsSpectrumList(xeDataList);
}
betaDataFile.setBProcessed(true);
betaDataFile.setSaveAnalysisResult(true);
map.put("bProcessed", true);
map.put("savedAnalysisResult", true);
}
} else {
List<Boundary> sampleBoundary = (List<Boundary>) map.get("SampleBoundary");
if(CollectionUtils.isNotEmpty(sampleBoundary)) {
betaDataFile.setSampleBoundary(sampleBoundary);
}
List<Boundary> gasBoundary = (List<Boundary>) map.get("GasBoundary");
if(CollectionUtils.isNotEmpty(gasBoundary)) {
betaDataFile.setGasBoundary(gasBoundary);
}
List<Boundary> detBoundary = (List<Boundary>) map.get("DetBoundary");
if(CollectionUtils.isNotEmpty(detBoundary)) {
betaDataFile.setDetBoundary(detBoundary);
}
List<Boundary> qcBoundary = (List<Boundary>) map.get("QCBoundary");
if(CollectionUtils.isNotEmpty(qcBoundary)) {
betaDataFile.setQcBoundary(qcBoundary);
}
map.put("XeData", Collections.EMPTY_LIST);
betaDataFile.setBProcessed(false);
betaDataFile.setSaveAnalysisResult(false);
betaDataFile.setXeResultsSpectrumList(Collections.EMPTY_LIST);
map.put("bProcessed", false);
map.put("savedAnalysisResult", false);
}
} catch (Exception e) {
e.printStackTrace();
}
result.setSuccess(true);
result.setResult(map);
return result;
}
@Override
public Result analyseAllSpectrum(List<String> dbNames, List<Integer> sampleIds, List<String> sampleFileNames, List<String> gasFileNames, List<String> detFileNames, List<String> qcFileNames, String currentFileName, HttpServletRequest request) {
Result result = new Result();
//获取用户名
String userName = JwtUtil.getUserNameByToken(request);
//获取自建台站缓存信息
Cache<String, SelfStationData> selfCache = selfStationCache.getSelfCache();
//获取本地缓存
// Cache<String, BetaDataFile> cache = betaCache.getBetaCache();
Map<String, Map<String, Object>> mapList = new HashMap<>();
try {
if (CollectionUtils.isNotEmpty(sampleFileNames)) {
for (int i=0; i<sampleFileNames.size(); i++) {
String sampleFileName = sampleFileNames.get(i);
BgCalibratePara BgCalPara = null;
Map<String, Object> map = new HashMap<>();
//获取缓存数据
SelfStationData selfStationData = selfCache.getIfPresent(sampleFileName + "-" + userName);
BetaDataFile betaDataFile = selfStationData.getBetaDataFile();
// BetaDataFile betaDataFile = cache.getIfPresent(sampleFileName + "-" + userName);
//根据文件路径 文件名称获取对应的临时文件
File sampleTmp = null;
File gasTmp = null;
File detTmp = null;
if (StringUtils.isNotBlank(betaDataFile.getSampleTmpPath())) {
sampleTmp = new File(betaDataFile.getSampleTmpPath());
}
if (StringUtils.isNotBlank(betaDataFile.getGasTmpPath())) {
gasTmp = new File(betaDataFile.getGasTmpPath());
}
if (StringUtils.isNotBlank(betaDataFile.getDetTmpPath())) {
detTmp = new File(betaDataFile.getDetTmpPath());
}
//获取缓存内容
List<SeriseData> betaList = new LinkedList<>();
List<String> betaFittingParaToUi = new LinkedList<>();
List<SeriseData> gammaList = new LinkedList<>();
List<String> gammaFittingParaToUi = new LinkedList<>();
if (Objects.nonNull(betaDataFile)) {
betaList = betaDataFile.getBetaList();
betaFittingParaToUi = betaDataFile.getBetaFittingParaToUi();
gammaList = betaDataFile.getGammaList();
gammaFittingParaToUi = betaDataFile.getGammaFittingParaToUi();
BgCalPara = betaDataFile.getBgPara();
}
if(Objects.nonNull(sampleTmp) && Objects.nonNull(gasTmp) && Objects.nonNull(detTmp)) {
//调用分析方法
boolean bRet = phdFileUtil.analyzeSpectrum(sampleTmp, gasTmp, detTmp, BgCalPara, map, betaDataFile);
//分析qc文件信息并重新计算qc边界值
if (StringUtils.isNotBlank(betaDataFile.getQcFilePathName())) {
EnergySpectrumStruct struct = betaDataFile.getQcStruct();
if (Objects.nonNull(struct)) {
phdFileUtil.CalQCBoundary(betaList, gammaList, betaFittingParaToUi, gammaFittingParaToUi, struct, map, betaDataFile);
}
}
if (bRet) {
List<Boundary> sampleBoundary = (List<Boundary>) map.get("SampleBoundary");
if(CollectionUtils.isNotEmpty(sampleBoundary)) {
betaDataFile.setSampleBoundary(sampleBoundary);
}
List<Boundary> gasBoundary = (List<Boundary>) map.get("GasBoundary");
if(CollectionUtils.isNotEmpty(gasBoundary)) {
betaDataFile.setGasBoundary(gasBoundary);
}
List<Boundary> detBoundary = (List<Boundary>) map.get("DetBoundary");
if(CollectionUtils.isNotEmpty(detBoundary)) {
betaDataFile.setDetBoundary(detBoundary);
}
List<Boundary> qcBoundary = (List<Boundary>) map.get("QCBoundary");
if(CollectionUtils.isNotEmpty(qcBoundary)) {
betaDataFile.setQcBoundary(qcBoundary);
}
List<GardsXeResultsSpectrum> xeDataList = (List<GardsXeResultsSpectrum>) map.get("XeData");
if (CollectionUtils.isNotEmpty(xeDataList)){
for (GardsXeResultsSpectrum xeData:xeDataList) {
Double conc = xeData.getConc();
Double mdc = xeData.getMdc();
if (conc < 0){
xeData.setColor("red");
xeData.setNidFlag(0);
} else if (0<conc && conc < mdc) {
xeData.setColor("#ffcc30");
xeData.setNidFlag(0);
} else if (conc > mdc) {
xeData.setColor("green");
xeData.setNidFlag(1);
}
xeData.setMdc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getMdc()))));
xeData.setConc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConc()))));
xeData.setConcErr(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConcErr()))));
}
betaDataFile.setXeResultsSpectrumList(xeDataList);
}
betaDataFile.setBProcessed(true);
betaDataFile.setSaveAnalysisResult(true);
map.put("bProcessed", true);
map.put("savedAnalysisResult", true);
mapList.put(sampleFileName, map);
} else {
List<Boundary> sampleBoundary = (List<Boundary>) map.get("SampleBoundary");
if(CollectionUtils.isNotEmpty(sampleBoundary)) {
betaDataFile.setSampleBoundary(sampleBoundary);
}
List<Boundary> gasBoundary = (List<Boundary>) map.get("GasBoundary");
if(CollectionUtils.isNotEmpty(gasBoundary)) {
betaDataFile.setGasBoundary(gasBoundary);
}
List<Boundary> detBoundary = (List<Boundary>) map.get("DetBoundary");
if(CollectionUtils.isNotEmpty(detBoundary)) {
betaDataFile.setDetBoundary(detBoundary);
}
List<Boundary> qcBoundary = (List<Boundary>) map.get("QCBoundary");
if(CollectionUtils.isNotEmpty(qcBoundary)) {
betaDataFile.setQcBoundary(qcBoundary);
}
map.put("XeData", Collections.EMPTY_LIST);
betaDataFile.setBProcessed(false);
betaDataFile.setSaveAnalysisResult(false);
betaDataFile.setXeResultsSpectrumList(Collections.EMPTY_LIST);
map.put("bProcessed", false);
map.put("savedAnalysisResult", false);
mapList.put(sampleFileName, map);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
result.setSuccess(true);
result.setResult(mapList);
return result;
}
@Override
public Result fitting(Double paramA, Double paramB, Double paramC, List<SeriseData> tempPoints, Integer count,
String sampleFileName, String tabName, boolean fittingBtn, HttpServletRequest request) {