fix:修复新beta的分析接口,增加对roiParams的处理

This commit is contained in:
xiaoguangbin 2024-08-07 11:56:08 +08:00
parent 9a7cdbe1ed
commit cd3d19db70
6 changed files with 144 additions and 53 deletions

View File

@ -0,0 +1,8 @@
package org.jeecg.common.constant;
public class SelfStationConstant {
public static final String ROI1 = "ROI1";
public static final String ROI2 = "ROI2";
public static final String ROI3 = "ROI3";
public static final String ROI4 = "ROI4";
}

View File

@ -1577,4 +1577,64 @@ public class SelfStationUtil extends AbstractLogOrReport {
} }
return result; return result;
} }
/**
* 检查ROI是否更新
* @param sampleVueData
* @param ROINum
* @return
*/
public boolean checkROIRenew(SelfStationVueData sampleVueData, String ROINum) {
boolean flag = false;
if (StrUtil.isNotBlank(ROINum)) {
switch (ROINum) {
case "ROI1":
if (!sampleVueData.getUsedROIOneBetaStart().equals(sampleVueData.getROIOneBetaStart())) {
return true;
} else if (!sampleVueData.getUsedROIOneBetaStop().equals(sampleVueData.getROIOneBetaStop())) {
return true;
}
break;
case "ROI2":
if (!sampleVueData.getUsedROITwoBetaStart().equals(sampleVueData.getROITwoBetaStart())) {
return true;
} else if (!sampleVueData.getUsedROITwoBetaStop().equals(sampleVueData.getROITwoBetaStop())) {
return true;
}
break;
case "ROI3":
if (!sampleVueData.getUsedROIThreeBetaStart().equals(sampleVueData.getROIThreeBetaStart())) {
return true;
} else if (!sampleVueData.getUsedROIThreeBetaStop().equals(sampleVueData.getROIThreeBetaStop())) {
return true;
}
break;
case "ROI4":
if (!sampleVueData.getUsedROIFourBetaStart().equals(sampleVueData.getROIFourBetaStart())) {
return true;
} else if (!sampleVueData.getUsedROIFourBetaStop().equals(sampleVueData.getROIFourBetaStop())) {
return true;
}
break;
}
}
if (!sampleVueData.getUsedROIOneBetaStart().equals(sampleVueData.getROIOneBetaStart())) {
return true;
} else if (!sampleVueData.getUsedROIOneBetaStop().equals(sampleVueData.getROIOneBetaStop())) {
return true;
} else if (!sampleVueData.getUsedROITwoBetaStart().equals(sampleVueData.getROITwoBetaStart())) {
return true;
} else if (!sampleVueData.getUsedROITwoBetaStop().equals(sampleVueData.getROITwoBetaStop())) {
return true;
} else if (!sampleVueData.getUsedROIThreeBetaStart().equals(sampleVueData.getROIThreeBetaStart())) {
return true;
} else if (!sampleVueData.getUsedROIThreeBetaStop().equals(sampleVueData.getROIThreeBetaStop())) {
return true;
} else if (!sampleVueData.getUsedROIFourBetaStart().equals(sampleVueData.getROIFourBetaStart())) {
return true;
} else if (!sampleVueData.getUsedROIFourBetaStop().equals(sampleVueData.getROIFourBetaStop())) {
return true;
}
return flag;
}
} }

View File

@ -189,8 +189,9 @@ public class SelfStationController {
@PostMapping("Reprocessing") @PostMapping("Reprocessing")
@ApiOperation(value = "analyze菜单下Reprocessing页面数据", notes = "analyze菜单下Reprocessing页面数据") @ApiOperation(value = "analyze菜单下Reprocessing页面数据", notes = "analyze菜单下Reprocessing页面数据")
public Result Reprocessing(String fileName, String processKey, HttpServletRequest request) { public Result Reprocessing(@RequestParam String fileName, @RequestParam String processKey,
return selfStationService.Reprocessing(fileName, processKey, request); @RequestParam String roiParams, HttpServletRequest request) {
return selfStationService.Reprocessing(fileName, processKey, roiParams, request);
} }
@GetMapping("InteractiveTool") @GetMapping("InteractiveTool")

View File

@ -30,6 +30,14 @@ public class SelfStationVueData implements Serializable {
* ROI-1范围矩形框终止道值 * ROI-1范围矩形框终止道值
*/ */
private Integer ROIOneBetaStop; private Integer ROIOneBetaStop;
/**
* ROI-1范围矩形框起始道值(分析后
*/
private Integer usedROIOneBetaStart;
/**
* ROI-1范围矩形框终止道值(分析后
*/
private Integer usedROIOneBetaStop;
/** /**
* ROI-1 GammaPHD数据 * ROI-1 GammaPHD数据
*/ */
@ -55,6 +63,14 @@ public class SelfStationVueData implements Serializable {
* ROI-2范围矩形框终止道值 * ROI-2范围矩形框终止道值
*/ */
private Integer ROITwoBetaStop; private Integer ROITwoBetaStop;
/**
* ROI-2范围矩形框起始道值(分析后
*/
private Integer usedROITwoBetaStart;
/**
* ROI-2范围矩形框终止道值(分析后
*/
private Integer usedROITwoBetaStop;
/** /**
* ROI-2 GammaPHD数据 * ROI-2 GammaPHD数据
*/ */
@ -74,6 +90,10 @@ public class SelfStationVueData implements Serializable {
private Integer ROIThreeBetaStart; private Integer ROIThreeBetaStart;
//ROI-3范围矩形框终止道值 //ROI-3范围矩形框终止道值
private Integer ROIThreeBetaStop; private Integer ROIThreeBetaStop;
//ROI-3范围矩形框起始道值(分析后
private Integer usedROIThreeBetaStart;
//ROI-3范围矩形框终止道值(分析后
private Integer usedROIThreeBetaStop;
/** /**
* ROI-3 GammaPHD数据 * ROI-3 GammaPHD数据
*/ */
@ -93,6 +113,10 @@ public class SelfStationVueData implements Serializable {
private Integer ROIFourBetaStart; private Integer ROIFourBetaStart;
//ROI-4范围矩形框终止道值 //ROI-4范围矩形框终止道值
private Integer ROIFourBetaStop; private Integer ROIFourBetaStop;
//ROI-4范围矩形框起始道值(分析后
private Integer usedROIFourBetaStart;
//ROI-4范围矩形框终止道值(分析后
private Integer usedROIFourBetaStop;
/** /**
* ROI-4 GammaPHD数据 * ROI-4 GammaPHD数据
*/ */
@ -163,6 +187,15 @@ public class SelfStationVueData implements Serializable {
ROITwoPHDFile = new PHDFile(); ROITwoPHDFile = new PHDFile();
ROIThreePHDFile = new PHDFile(); ROIThreePHDFile = new PHDFile();
ROIFourPHDFile = new PHDFile(); ROIFourPHDFile = new PHDFile();
usedROIOneBetaStart = 0;
usedROIOneBetaStop = 0;
usedROITwoBetaStart = 0;
usedROITwoBetaStop = 0;
usedROIThreeBetaStart = 0;
usedROIThreeBetaStop = 0;
usedROIFourBetaStart = 0;
usedROIFourBetaStop = 0;
} }
} }

View File

@ -19,8 +19,6 @@ public interface ISelfStationService {
void deleteSelfStationCache(String sampleFileName, HttpServletRequest request); void deleteSelfStationCache(String sampleFileName, HttpServletRequest request);
Result updateROI(Integer startChannel, Integer endChannel, Integer ROINum, String sampleFileName, HttpServletRequest request);
Result updateROI(List<ROIParam> roiParams, String sampleFileName, String dataType, HttpServletRequest request); Result updateROI(List<ROIParam> roiParams, String sampleFileName, String dataType, HttpServletRequest request);
Result energyCalibration(String fileName, String currentText, Double width, HttpServletRequest request); Result energyCalibration(String fileName, String currentText, Double width, HttpServletRequest request);
@ -63,7 +61,7 @@ public interface ISelfStationService {
Result viewBetaDetectorCalibration(Integer sampleId, String sampleFileName, String qcFileName, boolean fittingBtn, HttpServletRequest request); Result viewBetaDetectorCalibration(Integer sampleId, String sampleFileName, String qcFileName, boolean fittingBtn, HttpServletRequest request);
Result Reprocessing(String fileName, String processKey, HttpServletRequest request); Result Reprocessing(String fileName, String processKey, String roiParams, HttpServletRequest request);
Result InteractiveTool(Integer sampleId, String fileName, int gammaROINum, HttpServletRequest request); Result InteractiveTool(Integer sampleId, String fileName, int gammaROINum, HttpServletRequest request);

View File

@ -5,6 +5,7 @@ import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.StringPool;
@ -14,10 +15,12 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import me.zhyd.oauth.log.Log;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.math3.fitting.WeightedObservedPoints; import org.apache.commons.math3.fitting.WeightedObservedPoints;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.cache.SelfCache; import org.jeecg.common.cache.SelfCache;
import org.jeecg.common.constant.SelfStationConstant;
import org.jeecg.common.constant.StringConstant; import org.jeecg.common.constant.StringConstant;
import org.jeecg.common.constant.enums.FileTypeEnum; import org.jeecg.common.constant.enums.FileTypeEnum;
import org.jeecg.common.properties.ParameterProperties; import org.jeecg.common.properties.ParameterProperties;
@ -666,47 +669,15 @@ public class SelfStationServiceImpl implements ISelfStationService {
selfStationCache.deleteSelfCache(key); selfStationCache.deleteSelfCache(key);
} }
@Override public void updateROI(List<ROIParam> roiParams, SelfStationData selfStationData) {
public Result updateROI(Integer startChannel, Integer endChannel, Integer ROINum, String sampleFileName, HttpServletRequest request) {
Result result = new Result();
Map<String, Object> map = new HashMap<>();
//获取用户名
String userName = JwtUtil.getUserNameByToken(request);
//读取自建台站缓存
Cache<String, SelfStationData> selfCache = selfStationCache.getSelfCache();
//获取缓存的当前谱对应的数据
SelfStationData selfStationData = selfCache.getIfPresent(sampleFileName + StringPool.DASH + userName);
if (Objects.isNull(selfStationData)) {
result.error500("Load basic file information first!");
return result;
}
EnergySpectrumStruct struct = selfStationData.getSampleStruct(); EnergySpectrumStruct struct = selfStationData.getSampleStruct();
Map<String, Object> resultMap = selfStationUtil.statisticsROIList(startChannel, endChannel, struct.b_channels, struct.g_channels, struct.h_counts); LinkedList<Integer> roiBBoundaryStart = Lists.newLinkedList();
if ( CollectionUtils.isNotEmpty(resultMap) ) { LinkedList<Integer> roiBBoundaryStop = Lists.newLinkedList();
Integer startChannelValue = (Integer) resultMap.get("startChannel"); for (ROIParam roiParam : roiParams) {
Integer endChannelValue = (Integer) resultMap.get("endChannel"); roiBBoundaryStart.add(roiParam.getRoiNum() - 1, roiParam.getStartChannel());
List<SeriseData> seriseDataList = (List<SeriseData>) resultMap.get("dataList"); roiBBoundaryStop.add(roiParam.getRoiNum() - 1, roiParam.getEndChannel());
if (1 == ROINum) {
map.put("ROIOneList", seriseDataList);
map.put("ROIOneStart", startChannelValue);
map.put("ROIOneStop", endChannelValue);
} else if (2 == ROINum) {
map.put("ROITwoList", seriseDataList);
map.put("ROITwoStart", startChannelValue);
map.put("ROITwoStop", endChannelValue);
} else if (3 == ROINum) {
map.put("ROIThreeList", seriseDataList);
map.put("ROIThreeStart", startChannelValue);
map.put("ROIThreeStop", endChannelValue);
} else if (4 == ROINum) {
map.put("ROIFourList", seriseDataList);
map.put("ROIFourStart", startChannelValue);
map.put("ROIFourStop", endChannelValue);
}
} }
result.setSuccess(true); selfStationUtil.getGammaByROI(struct.system_type, roiBBoundaryStart, roiBBoundaryStop, selfStationData);
result.setResult(map);
return result;
} }
@Override @Override
@ -2135,7 +2106,7 @@ public class SelfStationServiceImpl implements ISelfStationService {
} }
@Override @Override
public Result Reprocessing(String fileName, String processKey, HttpServletRequest request) { public Result Reprocessing(String fileName, String processKey, String roiParams, HttpServletRequest request) {
Result result = new Result(); Result result = new Result();
String userName = JwtUtil.getUserNameByToken(request); String userName = JwtUtil.getUserNameByToken(request);
@ -2149,6 +2120,11 @@ public class SelfStationServiceImpl implements ISelfStationService {
result.error500("Please select the parse file first"); result.error500("Please select the parse file first");
return result; return result;
} }
List<ROIParam> roiParamList = null;
if (StrUtil.isNotBlank(roiParams)) {
roiParamList = JSONArray.parseArray(roiParams, ROIParam.class);
this.updateROI(roiParamList, selfStationData);
}
// Gamma文件内容转换为PHD实体 // Gamma文件内容转换为PHD实体
SelfStationVueData sampleVueData = selfStationData.getSampleVueData(); SelfStationVueData sampleVueData = selfStationData.getSampleVueData();
@ -2160,10 +2136,23 @@ public class SelfStationServiceImpl implements ISelfStationService {
Map<String, Object> roiMap = new HashMap<>(); Map<String, Object> roiMap = new HashMap<>();
try { try {
roiMap.put("ROI1", this.gammaAnalyse(processKey, phdOne, nuclideLinesMap, colorMap)); boolean bROI1 = selfStationUtil.checkROIRenew(sampleVueData, SelfStationConstant.ROI1);
roiMap.put("ROI2", this.gammaAnalyse(processKey, phdTwo, nuclideLinesMap, colorMap)); boolean bROI2 = selfStationUtil.checkROIRenew(sampleVueData, SelfStationConstant.ROI2);
roiMap.put("ROI3", this.gammaAnalyse(processKey, phdThree, nuclideLinesMap, colorMap)); boolean bROI3 = selfStationUtil.checkROIRenew(sampleVueData, SelfStationConstant.ROI3);
roiMap.put("ROI4", this.gammaAnalyse(processKey, phdFour, nuclideLinesMap, colorMap)); boolean bROI4 = selfStationUtil.checkROIRenew(sampleVueData, SelfStationConstant.ROI4);
roiMap.put(SelfStationConstant.ROI1, this.gammaAnalyse(processKey, phdOne, nuclideLinesMap, colorMap, bROI1));
roiMap.put(SelfStationConstant.ROI2, this.gammaAnalyse(processKey, phdTwo, nuclideLinesMap, colorMap, bROI2));
roiMap.put(SelfStationConstant.ROI3, this.gammaAnalyse(processKey, phdThree, nuclideLinesMap, colorMap, bROI3));
roiMap.put(SelfStationConstant.ROI4, this.gammaAnalyse(processKey, phdFour, nuclideLinesMap, colorMap, bROI4));
// 用于下次分析判断是否更新
sampleVueData.setUsedROIOneBetaStart(sampleVueData.getROIOneBetaStart());
sampleVueData.setUsedROIOneBetaStop(sampleVueData.getROIOneBetaStop());
sampleVueData.setUsedROITwoBetaStart(sampleVueData.getROITwoBetaStart());
sampleVueData.setUsedROITwoBetaStop(sampleVueData.getROITwoBetaStop());
sampleVueData.setUsedROIThreeBetaStart(sampleVueData.getROIThreeBetaStart());
sampleVueData.setUsedROIThreeBetaStop(sampleVueData.getROIThreeBetaStop());
sampleVueData.setUsedROIFourBetaStart(sampleVueData.getUsedROIFourBetaStart());
sampleVueData.setUsedROIFourBetaStop(sampleVueData.getROIFourBetaStop());
sampleVueData.setUsedEner(phdOne.getUsedEner()); sampleVueData.setUsedEner(phdOne.getUsedEner());
sampleVueData.setUsedEnerKD(phdOne.getUsedEnerKD()); sampleVueData.setUsedEnerKD(phdOne.getUsedEnerKD());
@ -2182,6 +2171,7 @@ public class SelfStationServiceImpl implements ISelfStationService {
result.setResult(roiMap); result.setResult(roiMap);
selfStationData.setBAnalyed(true); selfStationData.setBAnalyed(true);
} catch (RuntimeException e) { } catch (RuntimeException e) {
Log.error("analyse error", e);
result.error500(StrUtil.replace(e.getMessage(), "%s", "ROI")); result.error500(StrUtil.replace(e.getMessage(), "%s", "ROI"));
} }
return result; return result;
@ -5358,8 +5348,8 @@ public class SelfStationServiceImpl implements ISelfStationService {
if (!FileUtil.exist(logPath)) if (!FileUtil.exist(logPath))
return Result.error("The log generated by the automatic processor does not exist"); return Result.error("The log generated by the automatic processor does not exist");
result.put("Beta", FileUtil.readUtf8String(logPath)); result.put("Beta", FileUtil.readUtf8String(logPath));
List<GardsAnalysisRoi> analysisRois = analysisRoiAutoService.analysisRoi(idAnalysis); List<org.jeecg.modules.base.entity.rnauto.GardsAnalysisRoi> analysisRois = analysisRoiAutoService.analysisRoi(idAnalysis);
for (GardsAnalysisRoi analysisRoi : analysisRois) { for (org.jeecg.modules.base.entity.rnauto.GardsAnalysisRoi analysisRoi : analysisRois) {
Integer roiNum = analysisRoi.getRoiNum(); Integer roiNum = analysisRoi.getRoiNum();
String roiLogPath = analysisRoi.getLogPath(); String roiLogPath = analysisRoi.getLogPath();
roiLogPath = rootPath + logPathPrefix + StrUtil.SLASH + roiLogPath; roiLogPath = rootPath + logPathPrefix + StrUtil.SLASH + roiLogPath;
@ -5494,13 +5484,14 @@ public class SelfStationServiceImpl implements ISelfStationService {
* @throws RuntimeException * @throws RuntimeException
*/ */
private Map<String, Object> gammaAnalyse(String processKey, PHDFile phd, Map<String, NuclideLines> nuclideLinesMap, private Map<String, Object> gammaAnalyse(String processKey, PHDFile phd, Map<String, NuclideLines> nuclideLinesMap,
Map<String, String> colorMap) throws RuntimeException{ Map<String, String> colorMap, boolean bROI) throws RuntimeException{
phd.setUserId(processKey); phd.setUserId(processKey);
// 赋值xml文件存放路径 // 赋值xml文件存放路径
phd.setXmlFilePath(parameterProperties.getFilePath()); phd.setXmlFilePath(parameterProperties.getFilePath());
int flag = gammaFileUtil.AnalyseData(phd); int flag = gammaFileUtil.AnalyseData(phd);
if (flag == 0) { // bROI = false 表示ROI数据没有被修改
if (flag == 0 || !bROI) {
String warning = "The spectrum needn't Analyed. Maybe:\n" + String warning = "The spectrum needn't Analyed. Maybe:\n" +
"1. It has already Analyed.\n" + "1. It has already Analyed.\n" +
"2. You didn't change any setting or calibration."; "2. You didn't change any setting or calibration.";