Merge remote-tracking branch 'origin/mdc' into mdc
This commit is contained in:
commit
a78679d46d
|
@ -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<>();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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数据所需的lc,scac,baseline数据
|
||||
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());
|
||||
// 处理核素MDA、MDC
|
||||
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!");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user