人工交互模块gamma部分删除核素因为删除其他主峰导致删除的非主峰核素重新计算活度浓度问题修改

人工交互模块gamma部分缓存实体类新增加字段缓存核素信息
人工交互模块gamma部分初始化方法修改
This commit is contained in:
qiaoqinzheng 2024-03-07 11:21:26 +08:00
parent 05b6e83608
commit 6abe41c743
2 changed files with 35 additions and 114 deletions

View File

@ -175,6 +175,8 @@ public class PHDFile implements Serializable {
*/
private Integer efficiencyCurRow;
private Map<String, NuclideLines> phdNuclideMap;
public PHDFile() {
userId = "";
xmlFilePath = "";
@ -243,6 +245,7 @@ public class PHDFile implements Serializable {
efficiencyEnergy = new LinkedList<>();
efficiencyParam = new LinkedList<>();
efficiencyCurRow = 0;
phdNuclideMap = new HashMap<>();
}
}

View File

@ -158,121 +158,11 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
@Override
public Result initValue(Integer sampleId, String dbName, String analyst, String samfileName, HttpServletRequest request) {
Result result = new Result();
//获取用户名
String userName = JwtUtil.getUserNameByToken(request);
Cache<String, PHDFile> phdCache = localCache.getPHDCache();
PHDFile phd = new PHDFile();
// 读取文件内容
String key = "";
if (Objects.nonNull(sampleId) && StringUtils.isNotBlank(dbName)) {
// 根据sampleId获取sample文件路径
String sampleFilePath = spectrumAnalysisMapper.getSampleFilePath(sampleId);
if (StringUtils.isBlank(sampleFilePath)) {
result.error500("Sample file does not exist!");
return result;
}
String pathName = ftpUtil.getFtpRootPath() + spectrumPathProperties.getSaveFilePath() + StringPool.SLASH + sampleFilePath.substring(0, sampleFilePath.lastIndexOf(StringPool.SLASH));
String fileName = sampleFilePath.substring(sampleFilePath.lastIndexOf(StringPool.SLASH) + 1);
// 读取文件内容
// 调用加载文件的方法 传入文件路径文件名称全局变量phd响应结果result
boolean flag = gammaFileUtil.loadFile(pathName, fileName, phd, "BetaGamma", result);
// 如果文件加载失败 返回失败原因
if (!flag) {
return result;
}
// 加载phd数据所需的lcscacbaseline数据
if (dbName.equals("auto")) {
gammaFileUtil.SetBaseInfo(phd, "RNAUTO");
} else if (dbName.equals("man")) {
gammaFileUtil.SetBaseInfo(phd, analyst);
}
// 从数据库中读取phd其他相关信息
boolean bRet = getResultFromDB(dbName, analyst, sampleId, phd, result);
if (!redisUtil.hasKey(userName+StringPool.DASH+phd.getHeader().getSystem_type()) || !redisUtil.hasKey(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list")) {
//读取缓存的全部核素信息
Map<String, NuclideLines> allNuclideMap = (Map<String, NuclideLines>) redisUtil.get("AllNuclideMap");
// 查询当前用户关联的核素信息
List<String> userLib = new LinkedList<>();
// 从postgreSql中获取当前用户关注的核素信息 如果当前用户没有 则返回管理员的
userLib = defaultNuclideSpectrumService.findNuclidesByUserName(userName, phd.getHeader().getSystem_type().toUpperCase());
if (CollectionUtils.isEmpty(userLib)) {
userLib = defaultNuclideSpectrumService.findNuclidesByUserName("admin", phd.getHeader().getSystem_type().toUpperCase());
}
userLib = userLib.stream().sorted().collect(Collectors.toList());
Map<String, NuclideLines> nuclideMap = new HashMap<>();
for (Map.Entry<String, NuclideLines> entry:allNuclideMap.entrySet()) {
if (userLib.contains(entry.getKey())) {
nuclideMap.put(entry.getKey(), entry.getValue());
}
}
redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list", userLib);
redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap);
}
// 判断数据库信息是否读取正常
if (!bRet) {
return result;
}
//读取redis缓存的计算mdc信息
Map<String, CalMDCInfo> mdcInfoMap = (Map<String, CalMDCInfo>) redisUtil.get("mdcInfoMap-"+phd.getHeader().getSystem_type());
//如果是数据库加载 判断如果mdc计算结果是空的 就加入新的 否则使用数据库加载的mdc数据
if (CollectionUtils.isEmpty(phd.getMdcInfoMap())) {
if (CollectionUtils.isNotEmpty(mdcInfoMap)) {
phd.setMdcInfoMap(mdcInfoMap);
}
} else {
if (CollectionUtils.isNotEmpty(mdcInfoMap)) {
Map<String, CalMDCInfo> infoMap = phd.getMdcInfoMap();
for (Map.Entry<String, CalMDCInfo> entry:infoMap.entrySet()) {
String nuclName = entry.getKey();
CalMDCInfo info = mdcInfoMap.get(nuclName);
if (Objects.nonNull(info)) {
CalMDCInfo mdcInfo = entry.getValue();
mdcInfo.setHalflife(info.getHalflife());
}
}
}
}
gammaFileUtil.Qcstate(phd);
key = fileName + StringPool.DASH + userName;
result = this.gammaByDB(dbName, sampleId, analyst, request);
} else {
String pathName = ftpUtil.getFtpRootPath() + spectrumPathProperties.getUploadPath() + StringPool.SLASH + userName;
String fileName = samfileName;
// 加载文件内容
boolean bRet = gammaFileUtil.loadFile(pathName, fileName, phd, "BetaGamma", result);
if (!bRet) {
return result;
}
if (!redisUtil.hasKey(userName+StringPool.DASH+phd.getHeader().getSystem_type()) || !redisUtil.hasKey(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list")) {
//读取缓存的全部核素信息
Map<String, NuclideLines> allNuclideMap = (Map<String, NuclideLines>) redisUtil.get("AllNuclideMap");
// 查询当前用户关联的核素信息
List<String> userLib = new LinkedList<>();
// 从postgreSql中获取当前用户关注的核素信息 如果当前用户没有 则返回管理员的
userLib = defaultNuclideSpectrumService.findNuclidesByUserName(userName, phd.getHeader().getSystem_type().toUpperCase());
if (CollectionUtils.isEmpty(userLib)) {
userLib = defaultNuclideSpectrumService.findNuclidesByUserName("admin", phd.getHeader().getSystem_type().toUpperCase());
}
userLib = userLib.stream().sorted().collect(Collectors.toList());
Map<String, NuclideLines> nuclideMap = new HashMap<>();
for (Map.Entry<String, NuclideLines> entry:allNuclideMap.entrySet()) {
if (userLib.contains(entry.getKey())) {
nuclideMap.put(entry.getKey(), entry.getValue());
}
}
redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list", userLib);
redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap);
}
//读取redis缓存的计算mdc信息
Map<String, CalMDCInfo> mdcInfoMap = (Map<String, CalMDCInfo>) redisUtil.get("mdcInfoMap-"+phd.getHeader().getSystem_type());
if (CollectionUtils.isNotEmpty(mdcInfoMap)) {
phd.setMdcInfoMap(mdcInfoMap);
}
key = fileName + StringPool.DASH + userName;
result = this.gammaByFile(samfileName, request);
}
phdCache.put(key, phd);
localCache.setPHDCache(phdCache);
result.setSuccess(true);
result.setResult(phd);
return result;
}
@ -547,6 +437,9 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list", userLib);
redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap);
}
//缓存phd谱的核素信息
Map<String, NuclideLines> phdNuclideMap = (Map<String, NuclideLines>) redisUtil.get(userName + StringPool.DASH + phd.getHeader().getSystem_type());
phd.setPhdNuclideMap(phdNuclideMap);
// 判断数据库信息是否读取正常
if (!bRet) {
return result;
@ -951,6 +844,9 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list", userLib);
redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap);
}
//缓存phd谱的核素信息
Map<String, NuclideLines> phdNuclideMap = (Map<String, NuclideLines>) redisUtil.get(userName + StringPool.DASH + phd.getHeader().getSystem_type());
phd.setPhdNuclideMap(phdNuclideMap);
//读取redis缓存的计算mdc信息
Map<String, CalMDCInfo> mdcInfoMap = (Map<String, CalMDCInfo>) redisUtil.get("mdcInfoMap-"+phd.getHeader().getSystem_type());
if (CollectionUtils.isNotEmpty(mdcInfoMap)) {
@ -1335,6 +1231,9 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
result.error500(warning);
} else if (flag == -1) {
Map<String, NuclideLines> nuclideLinesMap = (Map<String, NuclideLines>) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type());
//分析时将phd的核素map重置
phd.setPhdNuclideMap(nuclideLinesMap);
//重新计算核素的活度浓度
gammaFileUtil.NuclidesIdent(phd, nuclideLinesMap);
gammaFileUtil.RunQC(phd);
phd.setEfficiencyParam(phd.getUsedEffiPara().getP());
@ -1350,6 +1249,9 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
result.error500(warning);
} else {
Map<String, NuclideLines> nuclideLinesMap = (Map<String, NuclideLines>) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type());
//分析时将phd的核素map重置
phd.setPhdNuclideMap(nuclideLinesMap);
//调用分析算法
gammaFileUtil.AnalyseSpectrum(phd, nuclideLinesMap);
// 重新分析各峰值对应的核素信息
// gammaFileUtil.NuclidesIdent(phd, nuclideLinesMap);
@ -1738,7 +1640,7 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
return result;
}
//获取缓存的核素信息
Map<String, NuclideLines> nuclideMap = (Map<String, NuclideLines>) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type());
Map<String, NuclideLines> nuclideMap = phd.getPhdNuclideMap();
//获取颜色信息
Map<String, String> colorMap = sysUserColorService.initColor(userName);
//声明一个结果的map
@ -2007,6 +1909,8 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
phd.getVPeak().get(curRow).nuclides.add(nuclideName);
// 查询当前用户所关心的核素名称
Map<String, NuclideLines> mapNucLines = (Map<String, NuclideLines>) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type());
//用户当前缓存的核素信息
Map<String, NuclideLines> phdNuclideMap = phd.getPhdNuclideMap();
// 查询出核素信息
NuclideLines it_line = mapNucLines.get(nuclideName);
// 如果核素信息不存在返回
@ -2025,6 +1929,12 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
map.put("identify", list_identify);
List<PeakInfo> vPeak = gammaFileUtil.InitPeakTable(phd.getVPeak());
map.put("table", vPeak);
//如果当前缓存的谱核素信息不包含当前核素
if (Objects.isNull(phdNuclideMap.get(nuclideName))) {
//将redis缓存的谱核素信息 存入到缓存map中
phdNuclideMap.put(nuclideName, it_line);
phd.setPhdNuclideMap(phdNuclideMap);
}
result.setSuccess(true);
result.setResult(map);
return result;
@ -2043,7 +1953,7 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
return result;
}
Map<String, Object> map = new HashMap<>();
Map<String, NuclideLines> nuclideMap = (Map<String, NuclideLines>) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type());
Map<String, NuclideLines> nuclideMap = phd.getPhdNuclideMap();
//判断当前选择的核素名称是否包含在当前Peak的核素列表中
int index = list_identify.indexOf(nuclideName);
if (index >= 0) {
@ -2089,6 +1999,13 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
List<PeakInfo> vPeak = gammaFileUtil.InitPeakTable(phd.getVPeak());
// 处理核素MDAMDC
gammaFileUtil.ReCalcMdaMdc(phd, nuclideName, curRow + 1);
// 谱的峰信息通过stream流过滤出包含当前核素名称的峰信息
List<PeakInfo> peakInfoList = phd.getVPeak().stream().filter(item -> item.nuclides.indexOf(nuclideName) >= 0).collect(Collectors.toList());
//过滤结果小于等于0 则说明当前核素在峰值中不存在了 需要从缓存的核素信息map中移除核素
if (peakInfoList.size() <= 0) {
//移除核素信息
nuclideMap.remove(nuclideName);
}
map.put("identify", list_identify);
map.put("table", vPeak);
}
@ -4145,6 +4062,7 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
}
redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list", userLib);
redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap);
phd.setPhdNuclideMap(nuclideMap);
} else {
result.success("Modification failure");
}