diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SelfStationController.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SelfStationController.java index 26e97d80..484516d3 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SelfStationController.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SelfStationController.java @@ -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) { diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SelfStationData.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SelfStationData.java index 392bca49..4a35ebbe 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SelfStationData.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SelfStationData.java @@ -50,6 +50,8 @@ public class SelfStationData implements Serializable { */ private SelfStationVueData detVueData; + private BetaDataFile betaDataFile; + private List> gammaNewEnergyListNow; private List> betaNewEnergyListNow; diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISelfStationService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISelfStationService.java index b075ff9b..3fde6491 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISelfStationService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISelfStationService.java @@ -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 dbNames, List sampleIds, List sampleFileNames, List gasFileNames, List detFileNames, List qcFileNames, String currentFileName, HttpServletRequest request); + Result fitting(Double paramA, Double paramB, Double paramC, List tempPointsArray, Integer count, String sampleFileName, String tabName, boolean fittingBtn, HttpServletRequest request); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SelfStationServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SelfStationServiceImpl.java index 52672228..ebcfb7b3 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SelfStationServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SelfStationServiceImpl.java @@ -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; @@ -32,12 +26,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; @@ -46,22 +39,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; @@ -71,6 +57,8 @@ public class SelfStationServiceImpl implements ISelfStationService { @Autowired private GammaFileUtil gammaFileUtil; @Autowired + private PHDFileUtil phdFileUtil; + @Autowired private ParameterProperties parameterProperties; @Autowired private FTPUtil ftpUtil; @@ -3335,6 +3323,778 @@ public class SelfStationServiceImpl implements ISelfStationService { return result; } + @Override + public Result ReAnalyse(AnalyseData analyseData, HttpServletRequest request) { + Result result = new Result(); + //声明接收当前分析后的返回结果的map + Map map = new HashMap<>(); + //获取当前登陆的用户名 + String userName = JwtUtil.getUserNameByToken(request); + //获取当前操作的文件名称 + String currentFileName = analyseData.getCurrentFileName(); + //获取自建台站缓存信息 + Cache selfCache = selfStationCache.getSelfCache(); + SelfStationData selfStationData = selfCache.getIfPresent(currentFileName + "-" + userName); + //获取缓存信息 +// Cache 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 BetaGammaAnalyzeCurrentProcess(AnalyseData analyseData, BetaDataFile betaDataFile) { + //声明一个map 缓存xeData计算后的结果 + Map xeMap = new HashMap<>(); + try { + //存储重新分析字段的实体类 + SpectrumGroup spectrum_group = new SpectrumGroup(); + //获取计算参数 + List betaList = new LinkedList<>(); + List betaFittingPara = new LinkedList<>(); + List betaFittingParaToUi = new LinkedList<>(); + List gammaList = new LinkedList<>(); + List gammaFittingPara = new LinkedList<>(); + List 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 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 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 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 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 sampleBoundary = (List) xeMap.get("SampleBoundary"); + if(CollectionUtils.isNotEmpty(sampleBoundary)) { + betaDataFile.setSampleBoundary(sampleBoundary); + } + List gasBoundary = (List) xeMap.get("GasBoundary"); + if(CollectionUtils.isNotEmpty(gasBoundary)) { + betaDataFile.setGasBoundary(gasBoundary); + } + List detBoundary = (List) xeMap.get("DetBoundary"); + if(CollectionUtils.isNotEmpty(detBoundary)) { + betaDataFile.setDetBoundary(detBoundary); + } + List qcBoundary = (List) xeMap.get("QCBoundary"); + if(CollectionUtils.isNotEmpty(qcBoundary)) { + betaDataFile.setQcBoundary(qcBoundary); + } + List xeResultsSpectrumList = (List) 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 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 sampleBoundary = (List) xeMap.get("SampleBoundary"); + if(CollectionUtils.isNotEmpty(sampleBoundary)) { + betaDataFile.setSampleBoundary(sampleBoundary); + } + List gasBoundary = (List) xeMap.get("GasBoundary"); + if(CollectionUtils.isNotEmpty(gasBoundary)) { + betaDataFile.setGasBoundary(gasBoundary); + } + List detBoundary = (List) xeMap.get("DetBoundary"); + if(CollectionUtils.isNotEmpty(detBoundary)) { + betaDataFile.setDetBoundary(detBoundary); + } + List qcBoundary = (List) 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 BetaGammaAnalyzeAllProcess(AnalyseData analyseData, String userName, String currentFileName){ + //获取自建台站缓存信息 + Cache selfCache = selfStationCache.getSelfCache(); + SelfStationData selfStationData = selfCache.getIfPresent(currentFileName + "-" + userName); + //从本地缓存获取beta gamma的数组 +// Cache cache = betaCache.getBetaCache(); + //返回最终结果用的map + Map> analyseResultMap = new HashMap<>(); + try { + //需要操作的数据集合 + for (String sampleFileName: analyseData.getSampleFileNames()){ + //使用当前文件名称获取用于获取计算的参数内容 +// BetaDataFile betaDataFile = cache.getIfPresent(currentFileName + "-" + userName); + BetaDataFile betaDataFile = selfStationData.getBetaDataFile(); + //获取缓存的计算结果 + List betaList = new LinkedList<>(); + List betaFittingPara = new LinkedList<>(); + List betaFittingParaToUi = new LinkedList<>(); + List> betaNewEnergyListNow = new LinkedList<>(); + List gammaList = new LinkedList<>(); + List gammaFittingPara = new LinkedList<>(); + List gammaFittingParaToUi = new LinkedList<>(); + List> 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 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 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 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 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 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 sampleBoundary = (List) xeMap.get("SampleBoundary"); + if(CollectionUtils.isNotEmpty(sampleBoundary)) { + sampleBetaData.setSampleBoundary(sampleBoundary); + } + List gasBoundary = (List) xeMap.get("GasBoundary"); + if(CollectionUtils.isNotEmpty(gasBoundary)) { + sampleBetaData.setGasBoundary(gasBoundary); + } + List detBoundary = (List) xeMap.get("DetBoundary"); + if(CollectionUtils.isNotEmpty(detBoundary)) { + sampleBetaData.setDetBoundary(detBoundary); + } + List qcBoundary = (List) xeMap.get("QCBoundary"); + if(CollectionUtils.isNotEmpty(qcBoundary)) { + sampleBetaData.setQcBoundary(qcBoundary); + } + List xeResultsSpectrumList = (List) 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 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 sampleBoundary = (List) xeMap.get("SampleBoundary"); + if(CollectionUtils.isNotEmpty(sampleBoundary)) { + sampleBetaData.setSampleBoundary(sampleBoundary); + } + List gasBoundary = (List) xeMap.get("GasBoundary"); + if(CollectionUtils.isNotEmpty(gasBoundary)) { + sampleBetaData.setGasBoundary(gasBoundary); + } + List detBoundary = (List) xeMap.get("DetBoundary"); + if(CollectionUtils.isNotEmpty(detBoundary)) { + sampleBetaData.setDetBoundary(detBoundary); + } + List qcBoundary = (List) 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 selfCache = selfStationCache.getSelfCache(); + SelfStationData selfStationData = selfCache.getIfPresent(sampleFileName + "-" + userName); + BetaDataFile betaDataFile = selfStationData.getBetaDataFile(); + //根据sample文件名称-用户名获取缓存信息 +// Cache cache = betaCache.getBetaCache(); +// BetaDataFile betaDataFile = cache.getIfPresent(sampleFileName + "-" + userName); + if (Objects.isNull(betaDataFile)) { + result.error500("Load basic file information first!"); + return result; + } + Map 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 betaList = new LinkedList<>(); + List betaFittingParaToUi = new LinkedList<>(); + List gammaList = new LinkedList<>(); + List 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 sampleBoundary = (List) map.get("SampleBoundary"); + if(CollectionUtils.isNotEmpty(sampleBoundary)) { + betaDataFile.setSampleBoundary(sampleBoundary); + } + List gasBoundary = (List) map.get("GasBoundary"); + if(CollectionUtils.isNotEmpty(gasBoundary)) { + betaDataFile.setGasBoundary(gasBoundary); + } + List detBoundary = (List) map.get("DetBoundary"); + if(CollectionUtils.isNotEmpty(detBoundary)) { + betaDataFile.setDetBoundary(detBoundary); + } + List qcBoundary = (List) map.get("QCBoundary"); + if(CollectionUtils.isNotEmpty(qcBoundary)) { + betaDataFile.setQcBoundary(qcBoundary); + } + if (CollectionUtils.isNotEmpty(map)) { + List xeDataList = (List) 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 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 sampleBoundary = (List) map.get("SampleBoundary"); + if(CollectionUtils.isNotEmpty(sampleBoundary)) { + betaDataFile.setSampleBoundary(sampleBoundary); + } + List gasBoundary = (List) map.get("GasBoundary"); + if(CollectionUtils.isNotEmpty(gasBoundary)) { + betaDataFile.setGasBoundary(gasBoundary); + } + List detBoundary = (List) map.get("DetBoundary"); + if(CollectionUtils.isNotEmpty(detBoundary)) { + betaDataFile.setDetBoundary(detBoundary); + } + List qcBoundary = (List) 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 dbNames, List sampleIds, List sampleFileNames, List gasFileNames, List detFileNames, List qcFileNames, String currentFileName, HttpServletRequest request) { + Result result = new Result(); + //获取用户名 + String userName = JwtUtil.getUserNameByToken(request); + //获取自建台站缓存信息 + Cache selfCache = selfStationCache.getSelfCache(); + //获取本地缓存 +// Cache cache = betaCache.getBetaCache(); + Map> mapList = new HashMap<>(); + try { + if (CollectionUtils.isNotEmpty(sampleFileNames)) { + for (int i=0; i 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 betaList = new LinkedList<>(); + List betaFittingParaToUi = new LinkedList<>(); + List gammaList = new LinkedList<>(); + List 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 sampleBoundary = (List) map.get("SampleBoundary"); + if(CollectionUtils.isNotEmpty(sampleBoundary)) { + betaDataFile.setSampleBoundary(sampleBoundary); + } + List gasBoundary = (List) map.get("GasBoundary"); + if(CollectionUtils.isNotEmpty(gasBoundary)) { + betaDataFile.setGasBoundary(gasBoundary); + } + List detBoundary = (List) map.get("DetBoundary"); + if(CollectionUtils.isNotEmpty(detBoundary)) { + betaDataFile.setDetBoundary(detBoundary); + } + List qcBoundary = (List) map.get("QCBoundary"); + if(CollectionUtils.isNotEmpty(qcBoundary)) { + betaDataFile.setQcBoundary(qcBoundary); + } + List xeDataList = (List) 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 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 sampleBoundary = (List) map.get("SampleBoundary"); + if(CollectionUtils.isNotEmpty(sampleBoundary)) { + betaDataFile.setSampleBoundary(sampleBoundary); + } + List gasBoundary = (List) map.get("GasBoundary"); + if(CollectionUtils.isNotEmpty(gasBoundary)) { + betaDataFile.setGasBoundary(gasBoundary); + } + List detBoundary = (List) map.get("DetBoundary"); + if(CollectionUtils.isNotEmpty(detBoundary)) { + betaDataFile.setDetBoundary(detBoundary); + } + List qcBoundary = (List) 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 tempPoints, Integer count, String sampleFileName, String tabName, boolean fittingBtn, HttpServletRequest request) {